确定Python进程的stdout是否被重定向
我发现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
其实,你想要做的就是检查一下 stdin
和 stdout
是否是同一个东西。
$ cat test.py
import os
print(os.fstat(0) == os.fstat(1))
$ python test.py
True
$ python test.py > f
$ cat f
False
$
比较 它们是否是同一个文件 的传统方法稍微复杂一点,主要是通过比较 st_ino
和 st_dev
来实现。通常在Windows系统上,这些值是通过某种方式伪造的,这样就能让这个特定的检查方法正常工作。