我有一个管道问题,无法正确运行subprocess.Popen。
代码:
import subprocess
cmd = 'cat file | sort -g -k3 | head -20 | cut -f2,3' % (pattern,file)
p = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
for line in p.stdout:
print(line.decode().strip())
文件长度约为1000行的输出结果:
...
sort: write failed: standard output: Broken pipe
sort: write error
文件长度> 241行的输出:
...
sort: fflush failed: standard output: Broken pipe
sort: write error
文件长度小于241行时输出正常。
我一直在阅读文档并疯狂地搜索,但我似乎漏掉了关于子进程模块的一些基本内容...可能与缓冲区有关。我试过使用p.stdout.flush()和更改缓冲区大小以及p.wait()。我尝试用类似'sleep 20; cat moderatefile'的命令来重现此问题,但这似乎在没有错误的情况下运行。