2017-03-22 6 views
0

サブプロセスが自分のしたいことをやり遂げるのに問題があります。私は入力ファイルを取るテストツールを持っています。 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行は表示されません。そのようなどこかに失われているような?

+0

どうして 'shell = True' – marisbest2

+0

私は別の場所で実行して1つのコマンドとしてサブプロセスに渡すコマンドをビルドしています。私は、コマンドを実行可能ファイル+ argsに分割したくない場合、shell = Trueを使用する必要があるという印象を受けました。 – John

+0

私はいつもshell = Trueを使うのは普通の方法ではないと言います。それなしでは機能しますか? – marisbest2

答えて

0

ありがとうございました!それは私が走っていた命令を作り上げた結果だった。コマンドにはexeとargsが1行に含まれています。

command = "testtool.exe -f <filename>" 
proc = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True) 

これはツールを実行しましたが、何らかの理由で私が予想していたエラーが発生しませんでした。次のスニペットを再フォーマットすると、私が期待していたエラーが発生します。

関連する問題