Pythonで外部プログラムを動かす

id:y_yanbeさんのコメントで、任意のコマンドの出力結果をcommands.getoutput()で得られることに気が付いた。今までコマンドの出力結果を得るというプログラムを書いたことがなかったので、てっきりos.system()で得られるのだと思っていた。返ってくるのはプロセスの終了ステータスなんですね。。。

commands.getoutput()で標準出力を得られることは分かった。では、標準入力からの入力を得るプログラムを動かすにはどうするか。

Python Cookbookに求めるものが書いてあった。os.popen()を使えばいいらしい。そもそもcommands.getoutput()はos.popen()を使っているようだ。以下実験。

PythonPythonを動かす。

>>> import os
>>> py = os.popen("python","w")
>>> print >> py,'print "Hello World!!"'
>>> py.flush()
>>> py.close()
Hello World!!

PythonRubyを動かす。

>>> import os
>>> rb = os.popen("irb","w")
>>> print >> rb, 'print "Hello World!!"'
>>> rb.flush()
>>> print "Hello World!!"
Hello World!!nil

>>> rb.close()

微妙に出力が違う。この違いは何なのだろう?