我正在做一个脚本来自动测试某个软件,作为它的一部分,我需要检查它是否正确运行命令。
目前,我正在使用subprocess启动一个可执行程序,并传递初始参数。subprocess.run("program.exe get -n WiiVNC", shell=True, check=True)
据我所知,这将运行可执行程序 如果退出代码为1,将返回一个异常。
我的问题是,我怎么去提交用户输入的 "y "用子进程一次,文本 "继续下载WiiVNC"?(yn) > "显示出来,或者程序等待用户输入时,我如何使用子进程提交用户输入 "y"?
试试这个。
import subprocess
process = subprocess.Popen("program.exe get -n WiiVNC", stdin=subprocess.PIPE, shell=True)
process.stdin.write(b"y\n")
process.stdin.flush()
stdout, stderr = process.communicate()
你应该使用pexpect模块来处理所有复杂的子处理。特别是,该模块被设计用来处理复杂的情况,即通过输入到当前进程让用户回答,或者让你的脚本为用户回答输入并继续子进程。
添加了一些代码作为例子。
### File Temp ###
# #!/bin/env python
# x = input('Type something:')
# print(x)
import pexpect
x = pexpect.spawn('python temp') #Start subprocess.
x.interact() #Imbed subprocess in current process.
# or
x = pexpect.spawn('python temp') #Start subprocess.
find_this_output = x.expect(['Type something:'])
if find_this_output is 0:
x.send('I type this in for subprocess because I found the 0th string.')