0

UNIXコマンドを実行するために以下のコードを使用しています:

cmd = 'ls -l'
(status,output) = commands.getstatusoutput(cmd)
print output

しかし、問題は、コマンドが完了した後にのみ出力が表示されることですが、実行が進むにつれて出力が出力されるのを見たいです。 ls -l単なるダミーコマンドです。実際のプログラムで複雑なコマンドを使用しています。

ありがとう!!

4

3 に答える 3

0

ほとんどのプログラムは、ttyに接続されていない場合、ブロックバッファ出力を使用するため、ptyに接続されているプログラムを実行する必要があります。最も簡単な方法は、pexpectを使用することです。

for line in pexpect.spawn('command arg1 arg2'):
    print line
于 2012-09-17T14:51:29.687 に答える
0

私が知らない Python でのより簡単な方法がない限り、もう少し複雑な関数を掘り下げる必要があると思いos.forkますos.pipe

基本的には、プロセスをフォークし、子にコマンドを実行させながら、その標準出力をパイプにリダイレクトし、親によって読み取られるようにするという考え方です。この種のパターンのを簡単に見つけることができます。

于 2012-09-17T14:21:15.633 に答える
0

これは宿題なので、完全な解決策ではなく、次のことを行う必要があります。

  1. subprocess.Popenクラスを使用して実行可能ファイルを呼び出します。コンストラクターは名前付きstdout引数を取ることに注意してくださいsubprocess.PIPE

  2. Popenデッドロックを回避するために、別のスレッドでオブジェクトの STDOUT パイプから読み取ります。threadingモジュールを参照してください。

  3. サブプロセスが終了するまで待ちます (を参照Popen.wait)。

  4. スレッドが出力の処理を完了するまで待ちます (「 」を参照Thread.join)。これは、サブプロセスが終了した後に発生する可能性が非常に高いことに注意してください。

さらにヘルプが必要な場合は、問題を正確に説明してください。

于 2012-09-17T14:18:23.997 に答える