を使用して Python (2.4/2.5/2.6) からプロセスを実行したいのですがPopen
、標準入力として文字列を渡したいと思います。
プロセスがその入力に対して「head -n 1」を実行する例を書きます。
以下は機能しますが、を使用せずに、より良い方法で解決したいと思い
echo
ます。
>>> from subprocess import *
>>> p1 = Popen(["echo", "first line\nsecond line"], stdout=PIPE)
>>> Popen(["head", "-n", "1"], stdin=p1.stdout)
first line
を使用しようとしましStringIO
たが、機能しません:
>>> from StringIO import StringIO
>>> Popen(["head", "-n", "1"], stdin=StringIO("first line\nsecond line"))
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/subprocess.py", line 533, in __init__
(p2cread, p2cwrite,
File "/usr/lib/python2.4/subprocess.py", line 830, in _get_handles
p2cread = stdin.fileno()
AttributeError: StringIO instance has no attribute 'fileno'
一時ファイルを作成してそこに文字列を書き込むこともできると思いますが、それもあまり良くありません。