使用子进程通过head -1获取grep的输出[重复]

Posted

技术标签:

【中文标题】使用子进程通过head -1获取grep的输出[重复]【英文标题】:Using subprocess to get output of grep piped through head -1 [duplicate] 【发布时间】:2015-03-25 02:53:57 【问题描述】:

我要做的事情的要点是:

grep -n "some phrase" some file path | head -1

我想将它的输出传递给 python。到目前为止我尝试过的是:

p = subprocess.Popen('grep -n "some phrase" some file path | head -1',shell=True,stdout=subprocess.PIPE)

我收到很多消息说

"grep: writing output: Broken pipe"

我对@9​​87654325@ 模块不是很熟悉,我希望得到有关如何获得此输出以及我目前做错了什么的建议。

【问题讨论】:

它适用于我在 linux 上。 发现类似问题:***.com/questions/295459/… 【参考方案1】:

让 shell 为你做这件事(懒惰的解决方法):

import subprocess
p = subprocess.Popen(['-c', 'grep -n "some phrase" some file path | head -1'], shell=True, stdout=subprocess.PIPE)
out, err = p.communicate()
print out, err

【讨论】:

【参考方案2】:

文档向您展示了如何使用 Popen replace shell piping:

from subprocess import PIPE, Popen


p1 = Popen(['grep', '-n', 'some phrase', 'some file path'],stdout=PIPE)
p2 = Popen(['head', '-1'], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
out,err = output = p2.communicate()

【讨论】:

@user3467349,他/她似乎想获取某个短语所在的行号,该行号应该返回。无论哪种方式,您都需要将进程 1 的输出传递给进程 2 的输入以复制管道。 非常感谢。因此,如果我必须通过 shell 中的多个东西来传递它,我可以为每个东西创建一个新的 Popen。 是的。它所做的基本上就是将一个进程的输出发送到另一个进程的输入。

以上是关于使用子进程通过head -1获取grep的输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章

(py2.7)通过子进程长“回声”

Python 子进程无法访问 .bat 文件,因为它被另一个进程使用

子进程和 Python 我做错了啥? [复制]

使用-Prop-传递数据(父组件通过 props 向下传递数据给子组件)

如何在父进程终止后终止所有子进程?

如果使用 python 和子进程从 pycharm 调用 gsutil 不起作用,“无法导入名称 _common”