我希望使用Python等效的管道命令来替代Perl。类似于使用Python版本的open(PIPE, "command |")。
我尝试使用subprocess模块实现如下:
p = subprocess.Popen("zgrep thingiwant largefile", shell=True, stdout=subprocess.PIPE)
这种方法可以像在perl中一样读取输出,但它不会自动清理。当我退出解释器时,会出现以下情况:
grep: writing output: Broken pipe
这段代码在stderr上输出了数百万次。我曾天真地希望这一切都能为我解决,但事实并非如此。调用p的terminate或kill似乎没有帮助。查看进程表,可以看到这会杀死/bin/sh进程,但是gzip子进程仍会因为管道损坏而产生错误。
有什么正确的方法来解决这个问题吗?
p
完成之前退出解释器? - physicsmichael