import subprocess
def ExecuteAndGetValue(cmd, v):
PrintCmd(cmd, v)
sub = subprocess.Popen(cmd, shell = True, stdout=subprocess.PIPE)
result = sub.communicate()
sub.wait()
return result
import subprocess
def ExecuteAndGetValue2(cmd, v):
PrintCmd(cmd, v)
sub = subprocess.Popen(cmd, shell = True, stdout=subprocess.PIPE)
result = sub.communicate()[0]
return result
[aa, err] = Util.ExecuteAndGetValue(cmd, args.v) # run half an hour, the output size is about 15MB
[bb, err] = Util.ExecuteAndGetValue(cmd, args.v) # run half an hour, the output size is about 15MB
print aa // aa is empty
print bb // bb is empty
cmd
打印/输出:stderr usingprint >> sys.stderr
和 stdout usingprint
result = []
for i in range(n):
print >> sys.stderr, "T_index: " + str(T_index)
bb = func(i)
result.append(bb)
print '\n'.join(result)
cmd 有一个循环,其中打印stderr
信息。最后,它将所有输出打印到result
(1) 如果cmd
打印较小的字符串,它工作正常。aa
并bb
显示正确的结果。
(2) 如果cmd
打印大尺寸,例如 10 Mb,aa
并且bb
是空的。
(3) 基于上述测试,在我看来 sub.communicate()[0] 从 Popen 实时读取标准输出?如果它是一个大的标准输出,它不能读取它?有人可以再解释一下吗?
另外,我想在屏幕上实时看到标准错误或错误信息。如果我使用以下内容,它不会实时显示标准错误:
import subprocess
def ExecuteAndGetValue(cmd, v):
PrintCmd(cmd, v)
sub = subprocess.Popen(cmd, shell = True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = sub.communicate()
print result[1]
return result
我该如何解决这个问题?它可能与缓冲区大小有关?谢谢