0

私はPythonプログラミングとプログラミングの初心者でもあります。この音が基本的な質問であるなら、親切に言い訳してください。

私はもちろんmakecleanとmakeongitを実行するツールを開発しています。

これらのmakeコマンドを実行するためにサブプロセスモジュールを使用しています。

1つの観察は次のとおりです:私はmakeコマンドの結果を見るためにcommunicateを使用します。通信の問題は、subprocess.popenが終了するのを待ってから、出力を送信することです。

makeコマンドが30分間実行された場合、画面に30分間出力が表示されず、通信は30分間収集したデータ全体を送信します。

質問は次のとおりです。stdoutに何かが表示されたときにサブプロセスから出力を取得し、それを画面に印刷する方法はありますか?

私がこれまでに書いたコードは次のとおりです。

def makeClean(path,cmd1='make',cmd2='clean'):
    print '+++++++++++ RUNNING MAKE CLEAN  +++++++++++ \n'
    c = subprocess.Popen([cmd1 , cmd2],stdout = subprocess.PIPE, stderr = subprocess.PIPE,cwd = path)
    out = c.communicate()[0]
    for line in out.split('\r\n'): print line

これについて何か考えはありますか?pexpect.run()を使用してみましたが、うまくいきませんでした...

-Vijay

4

1 に答える 1

2

出力をstdoutに送信する必要がある場合は、呼び出し元のプロセスにリダイレクトしないでください。ただ

subprocess.call([cmd1, cmd2], cwd=path)

しましょう。何らかの方法で出力を処理する必要がある場合は、使用せずcommunicateにパイプから直接読み取ります。

proc = subprocess.Popen([cmd1, cmd2], stdout=subprocess.PIPE, cwd=path)
for ln in proc.stdout:
    process(ln)
于 2012-07-04T14:35:01.037 に答える