Shell在Python中使用管道命令

时间:2016-03-11 05:50:20

标签: python

我试图从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

1 个答案:

答案 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可能存在安全隐患如果与之结合使用   不受信任的输入。请参阅常用参数下的警告   的信息。

来源:subprocess.Popen