ai didi

python 子进程: "write error: Broken pipe"

转载 作者:太空狗 更新时间:2023-10-29 17:29:01 24 4
gpt4 key购买 nike

我在管道传输一个简单的 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' 但这似乎运行没有错误。

最佳答案

来自 subprocess 上的食谱文档:

# To replace shell pipeline like output=`dmesg | grep hda`
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

关于 python 子进程: "write error: Broken pipe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106565/

24 4 0
文章推荐: angular - 无法在 Safari 9.1.2 中加载资源 : Observable. js.map
文章推荐: c# - 通过将类名作为字符串提供来获取引用程序集中的类型?
文章推荐: node.js - window.XMLHttpRequest 未定义
文章推荐: c# - 比较标志枚举的更好方法是什么?
太空狗
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com