如何检查文件是否写入终端?

时间:2012-11-14 11:09:25

标签: python unix

有没有办法检查python进程的输出是否正在写入文件?我希望能够做到这样的事情:

if is_writing_to_terminal:
    sys.stdout.write('one thing')
else: 
    sys.stdout.write('another thing')

2 个答案:

答案 0 :(得分:4)

您可以使用os.isatty()检查文件描述符是否为终端:

if os.isatty(sys.stdout.fileno()):
    sys.stdout.write('one thing')
else: 
    sys.stdout.write('another thing')

答案 1 :(得分:1)

使用os.isatty。这需要一个文件描述符(fd),可以使用fileno成员获得。

>>> from os import isatty
>>> isatty(sys.stdout.fileno())
True

如果你想支持任意文件(例如StringIO),那么你必须检查文件是否有关联的fd,因为并非所有文件都喜欢这样做:

hasattr(f, "fileno") and isatty(f.fileno())