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命令[重复]的主要内容,如果未能解决你的问题,请参考以下文章

回显shell转义参数[重复]

Python - 如何使用管道执行shell命令,但没有'shell = True'?

在Jenkins管道shell中运行嵌套命令

Excel VBA Shell 命令在文件路径中带有空格

shell之sed命令删除变量中带有“日期时间等内容”的方法

管道命令输出到 tee 但也保存命令的退出代码 [重复]