我想与流程互动。 我可以开始这个过程并打印出前两行(类似于'流程已成功启动')。 现在我想向进程发送一个新命令,该命令应该再次返回类似' command done'但没有任何反应。
请帮帮我。
import subprocess
def PrintAndPraseOutput(output, p):
print(output)
if 'sucessfully' in output:
p.stdin.write('command')
cmd = ["./programm"]
p = subprocess.Popen(cmd, universal_newlines=True, shell=False, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
while p.poll() is None:
output = p.stdout.readline()
PrintAndPraseOutput(output, p)
更新: 同样的问题,'流程成功启动后没有输出'
import subprocess
def print_and_parse_output(output, p):
print(output)
if 'successfully' in output:
p.stdin.write('command\n')
with subprocess.Popen(["./programm"], universal_newlines=True, shell=False, stdout=subprocess.PIPE, stdin=subprocess.PIPE) as proc:
while proc.poll() is None:
output = proc.stdout.readline()
print_and_parse_output(output, proc)
答案 0 :(得分:0)
您的I / O应该是行缓冲的,因此PrintAndPraseOutput
应该在字符串的末尾发送'\n'
。
print_and_parse_output
以符合PEP-0008,“成功”应具有2个c。
def print_and_parse_output(output, p):
print(output)
if 'successfully' in output:
p.stdin.write('command\n')
当像这样使用subprocess
时,最好将它放在with
语句中。来自the subprocess.Popen` docs:
通过
with
支持Popen对象作为上下文管理器 声明:退出时,标准文件描述符被关闭,并且 过程等待。with Popen(["ifconfig"], stdout=PIPE) as proc: log.write(proc.stdout.read())