我有一个grep查询:
grep "8=ABC\.4\.[24].*\|10=[0-9]+" output.txt |grep "35=8"| cut -d "|" -f 12 >redirect.txt如何在python脚本中执行相同的操作?我知道对于一个简单的grep,它的工作原理如下:
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命令并将其重定向到输出文件感到困惑?
发布于 2016-11-11 15:01:02
正如评论中提到的,这一切都可以在python中实现,而不需要调用任何东西。但是,如果您想进行外部调用,只需像在示例中那样保持链接即可。最终的stdout是一个打开的文件,用来完成重定向。注意,我还关闭了父端的stdout,这样它就不会保留管道的额外入口点。
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()发布于 2016-11-11 14:35:43
对于cut,它与grep完全相同。要重定向到最后的文件,只需open()一个文件,并在运行cut命令时将其作为stdout传递。
https://stackoverflow.com/questions/40542373
复制相似问题