等待用户输入后与python子进程进行交互

问题描述 投票:0回答:1

我正在做一个脚本来自动测试某个软件,作为它的一部分,我需要检查它是否正确运行命令。

目前,我正在使用subprocess启动一个可执行程序,并传递初始参数。subprocess.run("program.exe get -n WiiVNC", shell=True, check=True)据我所知,这将运行可执行程序 如果退出代码为1,将返回一个异常。

现在,程序启动了,但在某些地方等待用户输入,就像这样。Required user input

我的问题是,我怎么去提交用户输入的 "y "用子进程一次,文本 "继续下载WiiVNC"?(yn) > "显示出来,或者程序等待用户输入时,我如何使用子进程提交用户输入 "y"?

python python-3.x subprocess
1个回答
1
投票

试试这个。

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()

1
投票

你应该使用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.')
© www.soinside.com 2019 - 2024. All rights reserved.