【问题标题】:Shell commands with a pipe in Python [duplicate]Python中带有管道的Shell命令[重复]
【发布时间】: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 上

【问题讨论】:

    标签: python


    【解决方案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 不客气!)
    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多