サブプロセスが自分のしたいことをやり遂げるのに問題があります。私は入力ファイルを取るテストツールを持っています。 testtool.exe -fを実行し、コマンドプロンプトで実行すると、このような出力を生成します。Popenを使用してすべてのストリームを1つのストリームに出力する
12:30:46 INFO Output- Processing arguments
12:30:46 INFO Output- Arguments ok
12:30:46 INFO Output- Doing something
12:30:46 INFO Output- More Stuff
12:30:03 ERROR Output- Error found
12:30:03 INFO Output- Finished
12:30:03 INFO Output- Exiting
私はpython Python 3.4.3でこのツールを実行するためにサブプロセスを使用しようとしています。たとえば、...
proc = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True).communicate()[0].decode('utf-8')
for i in proc.splitlines():
print("> {0}".format(i))
残念ながら、出力には 'ERROR'行が含まれていません。私はそれを余分に検証する必要があるので、私はコマンドプロンプトから取得すると正確に出力を取りたいです。エラーラインがいくつ出現するか、出力に出現するエラーラインなど。 ERRORとINFOの行を別々のストリームに分割することは、私には合いません。
> 12:30:46 INFO Output- Processing arguments
> 12:30:46 INFO Output- Arguments ok
> 12:30:46 INFO Output- Doing something
> 12:30:46 INFO Output- More Stuff
> 12:30:03 INFO Output- Finished
> 12:30:03 INFO Output- Exiting
私も
proc = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=STDOUT, shell=True).communicate()[0].decode('utf-8')
を試してみた、これは私の最新の生まれ変わり...また
proc = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
proc_data = proc.communicate()
for i in proc_data[0].splitlines():
print ("INFO> {0}".format(i))
for i in proc_data[1].splitlines():
print ("ERROR> {0}".format(i))
で、ERROR行は表示されません。そのようなどこかに失われているような?
どうして 'shell = True' – marisbest2
私は別の場所で実行して1つのコマンドとしてサブプロセスに渡すコマンドをビルドしています。私は、コマンドを実行可能ファイル+ argsに分割したくない場合、shell = Trueを使用する必要があるという印象を受けました。 – John
私はいつもshell = Trueを使うのは普通の方法ではないと言います。それなしでは機能しますか? – marisbest2