确定是否重定向了Python进程的stdout

时间:2009-10-03 00:51:25

标签: python

我注意到卷曲可以判断我是否重定向其输出(在这种情况下,它会设置进度条)。

在Python脚本中有合理的方法吗?所以:

$ python my_script.py
未重定向

$ python my_script.py> output.txt的
重定向!

3 个答案:

答案 0 :(得分:33)

import sys

if sys.stdout.isatty():
    print "Not redirected"
else:
    sys.stderr.write("Redirected!\n")

答案 1 :(得分:8)

实际上,您要在此处查看stdinstdout是否相同。

$ cat test.py
import os
print os.fstat(0) == os.fstat(1)
$ python test.py
True
$ python test.py > f
$ cat f
False
$ 

较长但更传统的版本是同一个文件测试只是比较st_inost_dev。通常情况下,在Windows上,这些都是用某种东西的散列来伪造的,这样这种精确的设计模式就可以起作用。

答案 2 :(得分:4)

看看

os.isatty(fd)  

(但我认为这不适用于Windows)