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

Jef*_*ris 16 python

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

有没有合理的方法在Python脚本中执行此操作?所以:

$ python my_script.py
未重定向

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

nos*_*klo 34

import sys

if sys.stdout.isatty():
    print "Not redirected"
else:
    sys.stderr.write("Redirected!\n")
Run Code Online (Sandbox Code Playgroud)

  • 在 Windows 上有一个问题:如果流被重定向到 nul,`isatty` 仍然返回 True。 (2认同)

Dig*_*oss 10

其实,你要在这里做的是找出是否stdinstdout是一样的.

$ cat test.py
import os
print os.fstat(0) == os.fstat(1)
$ python test.py
True
$ python test.py > f
$ cat f
False
$ 
Run Code Online (Sandbox Code Playgroud)

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