【问题标题】:Why stderr print later than stdout?为什么 stderr 打印晚于 stdout?
【发布时间】:2019-01-15 07:21:06
【问题描述】:

stderr 没有缓冲区,stdout 有缓冲区。 stderr 没有理由迟于stdout

我试过了:

import sys
sys.stdout.write("stdout1 ")
sys.stderr.write("stderr1 ")
sys.stdout.write("stdout2 ")
sys.stderr.write("stderr2 ")

运行python test.py

结果:

stderr1 stderr2 stdout1 stdout2

它按预期工作。


import sys
sys.stdout.write("stdout1 ")
sys.stderr.write("stderr1 ")
sys.stdout.write("stdout2 ")
sys.stderr.write("stderr2 ")

运行python -u test.py

结果:

stdout1 stderr1 stdout2 stderr2

它按预期工作。


import sys
sys.stdout.write("stdout1\n")
sys.stderr.write("stderr1\n")
sys.stdout.write("stdout2\n")
sys.stderr.write("stderr2\n")

运行python test.py

结果:

stdout1
stderr1
stdout2
stderr2

它按预期工作。


import sys
sys.stdout.write("stdout1 ")
sys.stderr.write("stderr1 ")
sys.stdout.write("stdout2 ")
sys.stderr.write("stderr2 ")

print()
string = ""
for i in range(10):
    string = string + str(i) + "\n"
print(string)

实际结果:

stdout1 stdout2
0
1
2
3
4
5
6
7
8
9

stderr1 stderr2

我认为应该是:

stderr1 stderr2 stdout1 stdout2
0
1
2
3
4
5
6
7
8
9

【问题讨论】:

  • 如果你运行python test.py -u?
  • 是的。我已经解决了这个问题,感谢您的帮助。然而,Another problem 困扰着我。你有空来帮我吗?

标签: python stdout stderr


【解决方案1】:

在 Python3.x 中,stderr 是行缓冲区
在 Python2.x 中,stderr 是无缓冲的

https://bugs.python.org/issue13597
https://docs.python.org/3/library/sys.html#sys.stderr

【讨论】:

    猜你喜欢
    • 2013-06-27
    • 2016-03-13
    • 2012-11-29
    • 1970-01-01
    • 2012-06-23
    • 2017-04-23
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多