gpt4 book ai didi

python - Linux 管道读完但想丢弃其余部分

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

我有一段代码正在启动一个进程,然后从 stdout 读取以查看它是否加载正常。

在那之后,理想情况下我想将输出重定向到 /dev/null 或丢弃它的东西。我是(A)在这种情况下最好的做法是什么以及(B)如果管道变满,写入过程会发生什么?当管道变满且未被读取/清除时,它会阻塞吗?

如果目标是重定向到 /dev/null,是否可以向我展示如何使用 python 和 subprocess.Popen 进行此操作?

proc = subprocess.Popen(command, stderr=subprocess.PIPE)
while True:
if init_string in proc.stderr.readline():
break;

proc.stderr.redirect ??

最佳答案

据我所知,没有办法在子进程开始执行后关闭和重新打开它的文件描述符。是的,操作系统中的缓冲区有限,因此如果您不使用管道中的任何东西,最终子进程将阻塞。这意味着您只需要继续从管道读取数据,直到它从写入端关闭。

如果您希望您的程序在此期间继续做一些有用的事情,请考虑将数据消耗部分移动到一个单独的线程(未经测试):

def read_all_from_pipe(pipe):
for line in pipe: # assuming it's line-based
pass

Thread(lambda: read_all_from_pipe(proc.stderr)).start()

不过,可能还有其他方法可以解决您的问题。为什么首先需要等待某些特定的输出?如果它没有“加载正常”, child 不应该只是死于非零退出代码吗?您能否改为检查 child 是否在做它应该做的事情,而不是它正在打印一些任意输出?

关于python - Linux 管道读完但想丢弃其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36454651/

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