2017-05-28 5 views
0

を起動するには、サブプロセスモジュールを取得します私は1つの引数に取るprogramと呼ばれるコンパイルされたプログラムは、2phase_effと呼ばれています。私はこのプログラムをPythonから実行したいと思いますが、その進行状況(さまざまな進捗メッセージを出力します)をシェル上でリアルタイムで見ることもできるようにしたいと思います。これまでのところ、私は実際にそれを実行しているし、それが次のコードを使用して実行して行われた後、出力を表示することに成功しました:シェルウィンドウ

import subprocess 
subprocess.Popen("program 2phase_eff", stdout=subprocess.PIPE, shell=True).communicate() 

はい、これは一番最後に出力すべての中間のものを行いますが、2つの問題

    があります
  1. 私は、出力は私がABを満たすために、上記のコマンドを微調整することができますどのようにリアルタイムで

ないcmdシェルと

  • を見ることができません2つの目的がある?ありがとう。

  • +0

    あなたはどのOSを使用していますか? – Gahan

    +0

    私は、Windows 7 – user32882

    +0

    関連https://stackoverflow.com/questions/803265/getting-realtime-output-using-subprocessを使用しています – stovfl

    答えて

    0

    creationflagsの値をsubprocess.Popen()に渡す必要があるコマンドシェルを表示するには、次のように入力します。 WindowsではのパラメータはShellExecute()です。 010の間の整数です。 Popen()のデフォルトは0で、SW_HIDEに対応します。利用可能な値の完全なリストはhttps://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspxにあります。

    Popen.communicate()stdout=subprocess.PIPEと組み合わせて使用​​すると、リアルタイム出力が不足することがあります。サブプロセスが完了するまで、出力はメモリにバッファされます。これは、.communicate()が出力を返し、メソッド呼び出しが戻るまで取得しないためです。

    代わりにファイル記述子を渡して、それをポーリングしてみてください。

    +0

    ので、私は望ましい結果を達成するために使用すべきエンド・コマンドは何ですか? – user32882

    +0

    @ user32882:希望の結果がわからないので、私はそれに答えることができません。 'Popen.communicate()'は、サブプロセスが終了するまで待ちます。したがって、前に出力を見たい場合は、出力をパイプしません。あなたがすることは、あなたが望むものによって決まります。コマンドを '' 2phase_eff "> myfile.txt'プログラムに変更し、' stdout'をセットしないでください。あなたは微調整を求めました。本当に1つではありません。 – BoarGules

    関連する問題