2017-09-21 6 views
-1

次のコードからは出力が得られませんが、エラーは発生しません。コマンドラインでコマンドを手動で入力すると、たくさんの出力が得られます。P.communicate()は出力を返しませんが、終了コードは0です

grepCommand = "box | grep " + grepHostKey 
grepCommand = grepCommand.split() 

p = subprocess.Popen(grepCommand, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
(hostString, err) = p.communicate() 
print hostString  
print err 

出力:

私はシェルを追加する場合= Trueの私はちょうど「ボックス」コマンドから予想される応答を取得し、それをグレップにパイプされていません。私はshell = Trueを使わないように勧められているのを見ました。私はbufsize = 8192を試しましたが、これは処理するのに十分な大きさですが、まだ何もありません。何が間違っていると思っていますか?

答えて

1

パイプはシェルシンボルです。そのため、これはshell = Trueでしか機能しませんでした。しかし、あなたが言ったように、これはベストプラクティスではありません。ここでは、コマンドをサブプロセスで手動でパイプするために使用できるコードを示します。

box_process = Popen(["box"], stdout=PIPE) 
grep_process = Popen(["grep", grepHostKey], stdin=box_process.stdout, stdout=PIPE) 
box_process.stdout.close() 
(hostString, err) = grep_process.communicate() 
+0

upvote for_not_'shoot = True' :) –

関連する問題