2015-01-12 7 views
5

Popen.communicate()に問題があります。Popen.communicate()は、スクリプトの出力結果があっても(None、None)を返します。

文字列を返すスクリプトがあります。

次に、その変数を使用する2番目のスクリプトを書きました。

v = "./myscript arg1 arg2" 
com = subprocess.Popen(v, shell=True).communicate() 
print com 

comは(なし、なし)を返します。ポイントは、最初のスクリプト内で結果をプリントすることができるということです。 シェルプリント結果も同様です。私はそのプリントを変数に割り当てることはできません。

もちろん、最初のスクリプトは値を返し、印刷しません。 docsから

+2

'myscript'からの結果をPythonスクリプトに伝えるために標準出力を使うつもりなら、' myscript'を実際にSTDOUTに印刷する必要はありませんか? – rchang

+0

それは解決策でした。 –

答えて

5

:あなたは、プロセスの標準入力にデータを送信する場合は、あなたがstdin=PIPEPopenオブジェクトを作成する必要があること

注意。同様に、結果タプルにNone以外を取得するには、stdout=PIPEおよび/またはstderr=PIPEも指定する必要があります。したがって

Popenオブジェクトを作成する:

subprocess.Popen('lsr', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
+0

ありがとう!それは一歩前進ですが、今は空の文字列を取得しています.- –

+0

レイジー回答では、 'stdout = PIPE'または' stderr = PIPE'をどこに追加するか指定していません。 – N8TRO

0

[OK]を、解決策を見つけるrchang。たぶんそれは私のような初心者スクリプタにとっては役に立ちます。

メインスクリプトは結果を出力しませんでしたが、復帰しました。私はそれが正反対であると思った。

ありがとうございます!

関連する問題