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 から stdout を読み取るように見えますか? それが大きな標準出力の場合、それを読み取ることができませんか? 誰かがそれをもう少し説明できますか?
また、stderrやエラーメッセージをリアルタイムで画面に表示したいです。以下を使用すると、リアルタイムで stderr が表示されません。
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
この問題を解決するにはどうすればよいですか? バッファサイズに関連している可能性がありますか?ありがとう