Python vs bash stderr stdout buffering



我如何使我的python脚本表现得像bash对stderr and stdout缓冲?Bash正在缓冲Stderr和Stdout,因此按时间顺序出现印刷消息。下面的示例脚本说明了行为。用python 2.7在Ubuntu上测试14.04。

cstderr.c

#include <stdio.h>
#include <stdlib.h>
main()
{
    fprintf(stderr, "C out to stderrn");
    exit(0);
}

bash_stderr.sh

echo Before C cstderr
./cstderr.out
echo After C cstderr

py_stderr.py

#!/usr/bin/env python
import subprocess
print("Before C cstderr")
subprocess.check_call("./cstderr.out")
print("After C cstderr")

狂欢行为

$ ./bash_stderr.sh > outfile 2>&1
$ cat outfile
Before C cstderr
C out to stderr
After C cstderr

Python行为

$ ./py_stderr.py > outfile 2>&1
$ cat outfile 
C out to stderr
Before C cstderr
After C cstderr

在执行任何外部程序之前,击打flushes stdout。Python没有。要获得所需的行为,请在subprocess.check_call()之前立即致电sys.stdout.flush()

在Python的其他选项部分中查找-u选项。它迫使标准输入,输出和错误被禁止,因此不需要冲洗。

对于它的价值,您的程序在我的Ubuntu 4.2.0-42代系统上似乎在没有修改的情况下可以按预期工作,即使没有-u选项。

相关内容

  • 没有找到相关文章

最新更新