我试图通过python运行shell程序。我需要运行一个命令,然后当它仍在运行并等待输入继续时,我需要获取程序接收的输出,并将该数据作为字符串处理。然后我需要将一些数据解析到该程序中,并模拟输入按下。 实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
使用subprocess.Popen运行您的shell应用程序并使用communicate
与其进行交互。
答案 1 :(得分:0)
subprocess.Popen
可以为此工作,但要阅读然后再写,然后再次阅读,您就无法使用communicate
(因为这会导致流程结束)。
相反,您需要使用流程的输出管道(process.stdout
下方)。这样做是很棘手的,因为阅读过程的stdout
是blocking,所以你需要知道何时停止尝试阅读(或知道这个过程有多少输出)要生产)。
在这个例子中,子进程是一个shell脚本,它写入一行输出,然后回显你给它的任何内容,直到它读取EOF。
import subprocess
COMMAND_LINE = 'echo "Hello World!" ; cat'
process = subprocess.Popen(COMMAND_LINE, shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
s = process.stdout.readline().strip()
print(s)
s2 = process.communicate(s)[0]
print(s2)
给出:
Hello World!
Hello World!
对于更复杂的情况,您可能会考虑查看类似pexpect的内容。