【发布时间】:2011-12-13 20:25:48
【问题描述】:
# cmd = "python subscript.py"
cmd = "ping localhost -n 10"
ofile =open("C:\file.log","w")
sp = subprocess.Popen(cmd,bufsize = 1, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
while True:
sp.poll()
line = sp.stdout.readline()
#eline = sp.stderr.readline()
if line:
print line
ofile.write(line)
#if eline:
# print eline
# ofile.write(" ERROR: "+line)
# if (line == "" and eline == ""):
if (line == ""):
break
我正在尝试从子进程获取输出并使用上面的代码将其保存到日志文件中。它适用于ping localhost -n 10。但是当用它调用subscript.py时,我无法实时得到subscript.py的输出。我将在subscript.py 终止后获得所有输出。有什么建议吗?此外,我必须注释掉 eline = sp.stderr.readline() 才能使其正常工作。知道为什么某些代码不会给我subscript.py 的实时输出吗?
下标.py:
import time
i=0
while (i<5):
time.sleep(1)
i += 1
print "ouput:",i
正如 rubik 提到的,之前有人问过几个类似的问题。我尝试了所有我发现的东西,但没有一个能解决我的问题。希望有人能指出调用subscript.py时它不起作用的原因。
编辑: 这里的问题: subscript.py 的输出直到自身终止才被刷新。 subscript.py 也没有任何标准错误,因此调用 sp.stderr.readline() 会导致无限等待。 解决方案: 在 subscript.py 中刷新输出 对于所有标准错误,我只使用标准错误 = subprocess.STDOUT 重定向到标准输出。
【问题讨论】:
-
其他重复:stackoverflow.com/questions/1085071/…。其实有很多的重复,你只需要搜索。 stackoverflow.com/questions/527197/…
-
我搜索并尝试了我在 stackoverflow 上找到的所有代码。这里的关键是,当调用第二个 python 脚本时,相同的代码往往不起作用。
标签: python subprocess popen