0
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) cmd10 Mb などの大きなサイズを印刷し、aabbの場合。

(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

この問題を解決するにはどうすればよいですか? バッファサイズに関連している可能性がありますか?ありがとう

4

1 に答える 1