我正在编写一个调用另一个python脚本(script2)的python脚本。我希望在此过程中从脚本2获取print语句,而不仅仅是在结束时。我有这段代码:
command = ['python', '-i', script2]
process = subprocess.Popen(command,
stderr=subprocess.STDOUT,
stdout = subprocess.PIPE)
print "process started"
while process.poll() is None:
line = process.stdout.readline()
if not line:
break
print line
此代码确实将输出打印到屏幕,但子进程永远不会结束。
但是,将command
更改为command = ['python', script2]
会结束子进程,但只会在子进程结束后将输出打印到屏幕。
我如何获得所需的行为?先谢谢你, 罗埃尔
答案 0 :(得分:1)
我不确定如何避免陷阱,但是从解释器的帮助文本中可以看出:
-i:运行脚本后以交互方式检查;甚至强行提示 如果stdin似乎不是终端;还有PYTHONINSPECT = x
导入的是它强制提示。这意味着在执行脚本后,您再次获得解释器提示并访问所有变量和内容。解释器等待输入并且在收到键盘中断之前不会终止,exit()
作为提示输入给出或者进程被简单地终止。
答案 1 :(得分:1)
尝试使用-u
调用您的子流程(并且不要使用-i
)。这将阻止其输出被缓冲。直到它结束才会看到任何输出,因为它将所有输出写入缓冲区,在缓冲区填满或进程完成之前不会刷新。