gpt4 book ai didi

python - 如何判断通过管道的数据何时结束

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:58 26 4
gpt4 key购买 nike

在我的 python 程序中,我有两个 subprocesses 通过 pipe 互连,一个连接到 stdin,另一个连接到 标准输出。我的问题是,当数据流结束时,子进程会挂起,直到我按下 ctrl+c。在我看来,子流程正在打开我的管道。如果我能知道数据何时流经管道,我就可以手动关闭它。

def write(tag_name):
p_r, p_w = os.pipe()
pv = subprocess.Popen('pv', stdin=None, stdout=p_w)
dd = subprocess.Popen('dd bs=64k of=/dev/nst0'.split(), stdin=p_r, stdout=None)
dd.wait()

最佳答案

只是不要使用os.pipe(),你可以将子进程stdout直接传递给另一个进程stdin,像这样:

def write(tag_name):
pv = subprocess.Popen('pv', stdin=None, stdout=subprocess.PIPE)
dd = subprocess.Popen('dd bs=64k of=/dev/nst0'.split(), stdin=pv.stdout, stdout=None)
dd.wait()

当第一个命令结束时,管道被破坏(与需要手动关闭的os.pipe()相反),因此它也结束了第二个命令并且脚本可以继续/结束。

我已经测试了一个简单的管道命令,并且使用 os.pipe() 它会像您描述的那样在最后阻塞,但是当第一个进程以我的修改结束时退出。

关于python - 如何判断通过管道的数据何时结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41000728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com