【发布时间】:2010-11-28 02:58:14
【问题描述】:
我想使用Popen 从 Python (2.4/2.5/2.6) 运行一个进程,并且我
想给它一个字符串作为它的标准输入。
我将编写一个示例,其中进程执行“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'
我想我可以创建一个临时文件并在那里写入字符串——但这也不是很好。
【问题讨论】:
-
这是同一个问题,但这个问题是关于 Python 2 的,其中答案与 Python 3 略有不同(您不需要输入字符串前面的“b”并且不要'不需要解码结果)。