Python中带有管道的Shell命令[重复]
Posted
技术标签:
【中文标题】Python中带有管道的Shell命令[重复]【英文标题】:Shell commands with a pipe in Python [duplicate] 【发布时间】:2016-06-26 06:47:52 【问题描述】:我正在尝试从 python 运行 shell 命令,但是一旦添加管道,我就会收到“OSError: [Errno 2] No such file or directory”错误。我尝试了各种方法,甚至直接在 /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)] 在 linux2 上
【问题讨论】:
【参考方案1】:管道|
是一个外壳功能。如果你想使用它,你必须使用带有shell=True
的Popen。
import subprocess
p = subprocess.Popen(["ls | grep '20'"], stdout=subprocess.PIPE, shell=True)
out, err = p.communicate()
print out
注意:
警告传递 shell=True 可能是安全隐患如果与 不受信任的输入。请参阅常用参数下的警告 详情。
来源:subprocess.Popen
【讨论】:
谢谢。完美运行。 @paullb 不客气!)以上是关于Python中带有管道的Shell命令[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Python - 如何使用管道执行shell命令,但没有'shell = True'?