UNIXコマンドを実行するために以下のコードを使用しています:
cmd = 'ls -l'
(status,output) = commands.getstatusoutput(cmd)
print output
しかし、問題は、コマンドが完了した後にのみ出力が表示されることですが、実行が進むにつれて出力が出力されるのを見たいです。
ls -l
単なるダミーコマンドです。実際のプログラムで複雑なコマンドを使用しています。
ありがとう!!
ほとんどのプログラムは、ttyに接続されていない場合、ブロックバッファ出力を使用するため、ptyに接続されているプログラムを実行する必要があります。最も簡単な方法は、pexpectを使用することです。
for line in pexpect.spawn('command arg1 arg2'):
print line
これは宿題なので、完全な解決策ではなく、次のことを行う必要があります。
subprocess.Popen
クラスを使用して実行可能ファイルを呼び出します。コンストラクターは名前付きstdout
引数を取ることに注意してくださいsubprocess.PIPE
。
Popen
デッドロックを回避するために、別のスレッドでオブジェクトの STDOUT パイプから読み取ります。threading
モジュールを参照してください。
サブプロセスが終了するまで待ちます (を参照Popen.wait
)。
スレッドが出力の処理を完了するまで待ちます (「 」を参照Thread.join
)。これは、サブプロセスが終了した後に発生する可能性が非常に高いことに注意してください。
さらにヘルプが必要な場合は、問題を正確に説明してください。