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

26 投票
3 回答
4568 浏览
提问于 2025-04-15 14:46

我发现curl这个工具可以判断我是否在重定向它的输出(如果是的话,它会显示一个进度条)。

那么,有没有什么好的方法可以在Python脚本中做到这一点呢?所以:

$ python my_script.py
Not redirected

还有

$ python my_script.py > output.txt  
Redirected!

3 个回答

4

看看这个

os.isatty(fd)  

(不过我觉得这个在Windows上可能不太管用)

49

这段内容是关于编程的讨论,可能涉及到一些技术问题或者解决方案。具体来说,可能会有一些代码示例和解释,帮助大家理解如何处理某些编程上的挑战。

如果你是刚开始学习编程的小白,看到这些内容时,可能会觉得有些复杂,但其实只要慢慢来,逐步理解每个部分,就能掌握这些知识。

记得在学习的过程中,多动手实践,尝试运行代码,看看效果,这样会更容易理解。

import sys

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

其实,你想要做的就是检查一下 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系统上,这些值是通过某种方式伪造的,这样就能让这个特定的检查方法正常工作。

撰写回答