首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中执行多个bash命令?

如何在Python中执行多个bash命令?
EN

Stack Overflow用户
提问于 2016-11-11 14:32:26
回答 2查看 998关注 0票数 0

我有一个grep查询:

代码语言:javascript
复制
grep  "8=ABC\.4\.[24].*\|10=[0-9]+" output.txt |grep "35=8"| cut -d "|" -f 12 >redirect.txt

如何在python脚本中执行相同的操作?我知道对于一个简单的grep,它的工作原理如下:

代码语言:javascript
复制
sed_process = subprocess.Popen(['sed', sed_query,fopen], stdout=subprocess.PIPE) 
grep_query = "8=ABC\.4\.[24].*\|10=[0-9]+"
grep_process = subprocess.Popen(['grep', grep_query], stdin=sed_process.stdout, stdout=subprocess.PIPE)

我对如何组合2个grep命令和一个cut命令并将其重定向到输出文件感到困惑?

EN

回答 2

Stack Overflow用户

发布于 2016-11-11 15:01:02

正如评论中提到的,这一切都可以在python中实现,而不需要调用任何东西。但是,如果您想进行外部调用,只需像在示例中那样保持链接即可。最终的stdout是一个打开的文件,用来完成重定向。注意,我还关闭了父端的stdout,这样它就不会保留管道的额外入口点。

代码语言:javascript
复制
import subprocess as subp

p1 = subp.Popen(["grep", "8=ABC\.4\.[24].*\|10=[0-9]+", "output.txt"],
    stdout=subp.PIPE)
p1.stdout.close()
p2 = subp.Popen(["grep", "35=8"], stdin=p1.stdout, stdout=subp.PIPE)
p2.stdout.close()
p3 = subp.Popen(["cut", "-d", "|", "-f", "12"], stdin=p2.stdout, 
    stdout=open('redirect.txt', 'wb'))
p3.wait()
p2.wait()
p1.wait()
票数 2
EN

Stack Overflow用户

发布于 2016-11-11 14:35:43

对于cut,它与grep完全相同。要重定向到最后的文件,只需open()一个文件,并在运行cut命令时将其作为stdout传递。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40542373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档