python - io 重定向的奇怪行为

标签 python bash

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

#!/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()可以解决问题,有没有办法在不改变脚本的情况下强制消息序列(将输出/错误重定向到一个文件) ?

最佳答案

您可以使用 -u 标志运行 python 以强制取消缓冲 stdin、stdout 和 stderr。这样做会降低性能。最好在您希望一切都“立即可见”的任何时候执行明确的 .flush() 操作,这既是因为它更高效,也是因为它使您的意图显而易见(“这应该立即可见!”)。

关于python - io 重定向的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9616201/

相关文章:

Python 匹配元组的问题

Python popen 进程不会保持运行

PHP cURL 与 Linux cURL

bash - 在某些 Bash 自动完成选项的末尾添加空格,但不向其他选项添加空格?

bash - 如何使用 Bash 为变量引用文件?

python - 从一维张量中提取前 k 个值索引

python - 如何从奇数字符串中删除字符?

Python Pandas .DataFrame : Make whole row NaN according to condition

linux - 使用 sed, tr, ... 修复文件结构

bash - 将 jps 输出解析为数组