2012-05-04 31 views
1

私はbashスクリプトを呼び出すpythonスクリプトを持っています。 bashスクリプトはいくつかのモジュールをコンパイルしています。実行中にコンパイル結果が画面に表示されるようにしたいと思います。Pythonからbashを呼び出す

とにかく、重要なのは、bashスクリプトでは、ユーザーからかなりの数の入力が必要だということです。 私のpythonスクリプトがstdin/stdoutをbashスクリプトに与える方法を教えてください。あなたは、OSを使用することができ、私は

(_stat, _resl) = commands.getstatusoutput("./myBashScript") 

を使用していますが、bashが実行されている間、このようにユーザーが何も求めるプロンプトされていない瞬間のために

...

乾杯

答えて

3

subprocessを使用し、stdin/stdout/stderrを指定しないと正常に動作します。例:あなたが好きなようにあなたはまたstdoutを処理することができ

# lol.py 
import subprocess 
p = subprocess.Popen(['cat']) 
p.wait() 

$ python lol.py 
hello 
hello 
catting 
catting 

# lol.py 
import subprocess 

p = subprocess.Popen(['cat'], stdout=subprocess.PIPE) 
p.wait() 

print "\n\nOutput was:" 
print p.stdout.read() 

$ python lol.py 
hello 
catting 

^D 

Output was: 
hello 
catting 
+0

「あなたが必要ですか」について詳しく説明できますか?私は、 'サブプロセス'が私の状況に適した選択かどうかを知りたいです。私は総合的なエッセイを求めているわけではありませんが、彼の状況でOPが 'サブプロセス 'を使うべきだと思う理由を知ることは助けになります。 – LarsH

+0

@LarsH私は、 'サブプロセス 'が' commands'、 'os.popen'、' os.system'などではなく、あらゆる種類のプロセス呼び出しのための優先モジュールであることを意味しました。 – Dougal

+0

OK、ありがとうございます私は探していた。 – LarsH

0

。システムは、bashスクリプトを実行するためにgnome-terminalなどの端末ウィンドウを開きます。

1

envoy libraryを試してみてください。

import envoy 
r = envoy.connect('./myBashScript') 
r.send('input text') # send info on std_in 
r.expect('output text') # block until text seen 
print r.std_out # print whatever is in the std_out pipe 
関連する問題