如果我执行以下操作:
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对象没有足够接近库中的子程序来适应subprocess.Popen。我该如何解决?
call(['ls', '-1'], shell=True)
不正确。我建议改为从子流程的标签说明中阅读常见问题。特别是当args是sequence时,为什么subprocess.Popen不起作用?解释为什么call(['ls', '-1'], shell=True)
错了。我记得在博客文章下留下评论,但是由于某种原因我现在看不到它们。
subprocess.run
请参见stackoverflow.com/questions/48752152/…–