Python:连续将check_call输出到文件中?

时间:2015-07-09 14:08:16

标签: python python-3.x filestream

是否可以获得以下int程序:

check_call

logPath="log.txt" with open(logPath,"w") as log: subprocess.check_call(command, stdout = log, stderr=subprocess.STDOUT ) stdout输出到文件连续

在我的机器上,输出仅在stderr

之后写入文件

为实现这一目标,或许我们可以修改subprocess.check_call finished文件流的缓冲区长度?

1 个答案:

答案 0 :(得分:3)

不是没有一些操作系统技巧。

这是因为当输出是终端时输出通常是行缓冲(即在换行符之后,缓冲区为flushed),但它是块-bffered 当输出是文件或管道时,所以在块缓冲的情况下,你不会看到输出写的"连续",而是每1k写一次或4k或任何块大小。

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

http://www.gnu.org/software/libc/manual/html_node/Buffering-Concepts.html

解释了(更好)缓冲的概念

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

如果你可以修改子进程'代码,您可以在每行之后或需要时拨打flush()

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

可能相关: