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
答案 0 :(得分:1)
在Python3.x中,stderr是行缓冲区
在Python2.x中,stderr是无缓冲的
https://bugs.python.org/issue13597
https://docs.python.org/3/library/sys.html#sys.stderr