gpt4 book ai didi

Python:有 check_call 输出到文件连续?

转载 作者:行者123 更新时间:2023-11-28 16:31:37 25 4
gpt4 key购买 nike

是否可以得到下面的check_call过程:

 logPath="log.txt"
with open(logPath,"w") as log:
subprocess.check_call(command, stdout = log, stderr=subprocess.STDOUT )

stdoutstderr 输出到文件连续

在我的机器上,只有在 subprocess.check_call 完成后,输出才会写入文件。

要实现这一点,也许我们可以修改log 文件流的缓冲区长度?

最佳答案

并非没有一些操作系统技巧。

发生这种情况是因为当输出是终端时,输出通常是行缓冲(即在换行符之后,缓冲区是 flushed ),但它是 block 缓冲 当输出是文件或管道时,因此在 block 缓冲情况下,您不会看到“连续”写入输出,而是每隔 1k 或 4k 或任何 block 大小写入一次.

这是 libc 的默认行为,因此如果子进程是用 C 编写的并使用 printf()/fprintf(),它将检查输出是否正确是终端还是文件,相应地改变缓冲模式。

缓冲的概念在 http://www.gnu.org/software/libc/manual/html_node/Buffering-Concepts.html 中有(更好的)解释

这样做是出于性能原因(参见 the answer to this question)。

如果您可以修改子进程的代码,则可以在每行之后或需要时调用 flush()

否则有外部工具强制行缓冲模式(通过欺骗程序相信输出是一个终端):

可能相关:

关于Python:有 check_call 输出到文件连续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31319969/

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