(ウィンドウズ)
プログラム SoX (サブプロセス モジュール) を呼び出す Python コードをいくつか書きました。このプログラムは、指定した場合に STDERR で進行状況を出力します。出力からパーセンテージステータスを取得したい。Python スクリプトからではなく呼び出すと、すぐに開始され、100% までスムーズに進行します。
Pythonスクリプトから呼び出すと、開始するまで数秒続き、その後、遅い出力と速い出力を交互に繰り返します。私は char ごとに char を読みますが、大きなブロックが突進することがあります。ですから、他の時間にキャラクターが1人ずつ増えていくのを見ることができる理由がわかりません. (ちなみに、私のテストでは 15KiB のデータが生成されます。)
mkvmerge と mkvextract で同じことをテストしました。パーセンテージも出力します。STDOUT の読み取りはスムーズです。
これはとても頼りにならない!sox の stderr ストリームの読み取りをスムーズにし、おそらく最初の遅延を防ぐにはどうすればよいですか?
私が電話して読む方法:
process = subprocess.Popen('sox_call_dummy.bat', stderr = subprocess.PIPE, stdout = subprocess.PIPE)
while True:
char = process.stderr.read(1).encode('string-escape')
sys.stdout.write(char)