ホームページ >バックエンド開発 >Python チュートリアル >Python のサブプロセス コマンドからライブ出力を取得するにはどうすればよいですか?
サブプロセス コマンドからのライブ出力
Python では、サブプロセス コマンドからの出力をキャプチャし、同時に以下を使用してライブ ストリーミング出力を生成できます。次のアプローチ:
Iterator
import subprocess import sys p = subprocess.Popen(['command'], stdout=subprocess.PIPE) for line in iter(lambda: p.stdout.readline(1), ''): sys.stdout.buffer.write(line)
FileWriter と FileReader の使用
import io import time import subprocess import sys log = 'test.log' with io.open(log, 'wb') as writer, io.open(log, 'rb', 1) as reader: p = subprocess.Popen(['command'], stdout=writer) while p.poll() is None: sys.stdout.write(reader.read()) time.sleep(0.5) # Read the remaining sys.stdout.write(reader.read())
元のコードのリファクタリング
元のコードでは、次のようにサブプロセスを作成した後にライブ出力をキャプチャできます。
ret_val = subprocess.Popen(run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) while not ret_val.poll(): log_file.flush() for line in iter(lambda: ret_val.stdout.readline(1), ''): if line: print(line) log_file.write(line.decode())
このメソッドを使用すると、stdout ストリームと stderr ストリームの両方をキャプチャし、ライブ出力を出力すると同時にログ ファイルに書き込むことができます。
以上がPython のサブプロセス コマンドからライブ出力を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。