2

これが私のコードです。

import subprocess

bashCommand = "./program -s file_to_read.txt | ./awk_program.txt"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output = process.communicate()[0]
output2 = process.stdout
print output
print output2

このbashコマンドをターミナルで使用すると、awk_programの出力が出力されます(stdoutに出力されるだけです)。しかし、Pythonでは、outputは何も出力せず、output2は出力します

<closed file '<fdopen>', mode 'rb' at 0x2b5b20>

出力を返すために何をする必要がありますか?

4

1 に答える 1

2

パイプを機能shell=Trueさせるには、オプションを使用する必要があります。Popen()

Popen入力がどこから来ているのか正確にわからない場合shell=Trueは、セキュリティ リスクになることに注意してください。

また、ここで分割する必要はありませんbashCommand。例えば:

>>> import subprocess as sp    
>>> cmd = 'echo "test" | cat'
>>> process = sp.Popen(cmd,stdout=sp.PIPE,shell=True)
>>> output = process.communicate()[0]
>>> print output
test
于 2012-11-11T19:04:06.497 に答える