io重定向的奇怪行为

2024-03-29 12:47:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的脚本,可以将一些消息打印到控制台

#!/usr/bin/python
import sys
print >>sys.stdout, "1 stdout"
print >>sys.stderr, "2 stderr"

正常序列

[dyno@cola:codes]$ ./x.py
1 stdout
2 stderr

[dyno@cola:codes]$ ./x.py 2>&1
1 stdout
2 stderr

输出顺序错误

[dyno@cola:codes]$ ./x.py &>x.txt
[dyno@cola:codes]$ cat x.txt
2 stderr
1 stdout
[dyno@cola:codes]$ ./x.py 2>&1 | tee x.log
2 stderr
1 stdout

添加sys.stdout.flush()似乎可以解决这个问题,有没有办法在不更改脚本的情况下强制消息序列(将输出/错误重定向到文件)?你知道吗


Tags: pytxt脚本消息binusr错误stderr
1条回答
网友
1楼 · 发布于 2024-03-29 12:47:36

可以使用-u标志运行python以强制stdin、stdout和stderr取消缓冲。这样做会受到性能惩罚。最好在任何时候执行显式的.flush()操作,使所有内容都“立即可见”,这既是因为它更有效,也是因为它使您的意图变得明显(“这应该立即可见!”)。你知道吗

相关问题 更多 >