我试图从python运行shell命令,但是一旦我添加了一个管道,我就得到一个" OSError:[Errno 2]没有这样的文件或目录"错误。我尝试了各种各样的东西,甚至直接在/ bin / grep引用了grep。知道我做错了吗?
作品:
import subprocess
p = subprocess.Popen(["ls"], stdout=subprocess.PIPE)
out, err = p.communicate()
print out
不起作用:
import subprocess
p = subprocess.Popen(["ls | grep '20'"], stdout=subprocess.PIPE)
out, err = p.communicate()
print out
显示错误:
[OMITTED]$ python test.py
Traceback (most recent call last):
File "test.py", line 2, in <module>
p = subprocess.Popen(["ls | grep '20'"], stdout=subprocess.PIPE)
File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1234, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
[OMITTED]$
版本: Python 2.6.6(r266:84292,2014年1月22日,09:42:36) [gCC 4.4.7 20120313(Red Hat 4.4.7-4)] on linux2
答案 0 :(得分:1)
管道|
是一个shell功能。如果你想使用它,你必须使用Popen和shell=True
。
import subprocess
p = subprocess.Popen(["ls | grep '20'"], stdout=subprocess.PIPE, shell=True)
out, err = p.communicate()
print out
注意:强>
警告传递shell = True可能存在安全隐患如果与之结合使用 不受信任的输入。请参阅常用参数下的警告 的信息。