python - 使用子进程获取通过 head -1 管道传输的 grep 的输出

标签 python grep pipe subprocess head

<分区>

我想做的事情的要点是:

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"

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

最佳答案

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

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()

关于python - 使用子进程获取通过 head -1 管道传输的 grep 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28154437/

相关文章:

用于排除大写匹配的正则表达式

python - 我可以使用 asyncio 读取和写入 multiprocessing.Pipe 吗?

regex - 多行 grep 正则表达式不起作用

python - OpenCV python 错误 (-215) 照片找到 50% 的时间

python - Django:如何动态加载表单到当前html页面

python - 使用 OpenCV 和 Python 将拼图图像拼接在一起

unix - ps –ef|grep java 和 ps –ef|grep *.java 的区别

c - 管道 "bad address"管道打开

c - 在 C 中将字符写入管道

python - 返回与指针赋值之间的 c_char_p 行为不一致