2012-03-27 3 views
1

私はPythonには全く新しく、スクリプトを変更して別のプログラムを呼び出して出力するようにしました。私は研究しましたが、すべてのソリューションは次のようなものを指していますPopenをPythonなどで正しく使用する

p = sub.Popen('echo '+s+' | ${morphg_res:-./morphg.ix86_linux -t}', shell=True,stdout=sub.PIPE,stderr=sub.PIPE) 
out,err=p.communicate() 
print out 

私はそれを動作させることができませんでした。 「プリントアウト」は何も印刷しません。

私はそれが

os.system('echo '+s+' | ${morphg_res:-./morphg.ix86_linux -t}') 

で作業していたが、この方法は、私はmorphgの出力を得ることができません。

また、私は2番目の部分が意味するものを正確に理解していませんが、プログラムをccorrectly呼び出していることがわかります。出力がstdinになっているだけで、変数に入る必要があります。

助けが必要ですか?

P .:私がPython 2.6を持っているので、subprocess.check_outputはオプションではありません。

+1

は「シェル= True」を使用すると、同じ理由(popenのにコマンド文字列を渡すことos.system()の使用と(back tick)と$()(コマンド置換)と意図しない結果を引き起こすコマンドに補間できる他の文字列があるという点では危険です。 shell = False(デフォルト)のままにして、リスト(ベクトル):['echo'、s]を渡すのが最善です。この場合、複数のプロセスを設定し、配管を自分で配置する必要があります。 –

+0

私はそれを読んだことがありますが、どうすればいいのかわかりません。= P – elithin

答えて

0

はこの試してみてください。一般的に悪いアイデアであると考えられています

import os 
p = os.popen('echo '+s+' | ${morphg_res:-./morphg.ix86_linux -t}') 
out = p.read() 
print out 
+0

大変感謝しています! – elithin

+0

私は助けることができてうれしい! :) –

関連する問題