如果我这样做:
import subprocess
from cStringIO import StringIO
subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0]
我得到:
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 533, in __init__
(p2cread, p2cwrite,
File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 830, in _get_handles
p2cread = stdin.fileno()
AttributeError: 'cStringIO.StringI' object has no attribute 'fileno'
显然,cStringIO.StringIO对象与文件duck的距离不够近,无法适应subprocess.Popen。我该怎么解决这个问题?
我有点惊讶没有人建议创建管道,在我看来,这是将字符串传递给子进程stdin的最简单的方法:
我找到了解决办法:
有更好的吗?
^{} 文档:
所以你的例子可以写成如下:
在当前的Python 3版本中,您可以使用^{} ,将输入作为字符串传递给外部命令并获取其退出状态,并在一次调用中将其输出作为字符串:
相关问题 更多 >
编程相关推荐