使用-i参数调用时,python子进程永远不会停止

时间:2012-03-13 22:48:50

标签: python

我正在编写一个调用另一个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]会结束子进程,但只会在子进程结束后将输出打印到屏幕。

我如何获得所需的行为?先谢谢你, 罗埃尔

2 个答案:

答案 0 :(得分:1)

我不确定如何避免陷阱,但是从解释器的帮助文本中可以看出:

  

-i:运行脚本后以交互方式检查;甚至强行提示            如果stdin似乎不是终端;还有PYTHONINSPECT = x

导入的是它强制提示。这意味着在执行脚本后,您再次获得解释器提示并访问所有变量和内容。解释器等待输入并且在收到键盘中断之前不会终止,exit()作为提示输入给出或者进程被简单地终止。

答案 1 :(得分:1)

尝试使用-u调用您的子流程(并且不要使用-i)。这将阻止其输出被缓冲。直到它结束才会看到任何输出,因为它将所有输出写入缓冲区,在缓冲区填满或进程完成之前不会刷新。