Подтвердить что ты не робот

Определение того, перенаправляется ли stdout для процесса Python

Я заметил, что завиток может определить, перенаправляет ли я его вывод (в этом случае он помещает индикатор выполнения).

Есть ли разумный способ сделать это в Python script? Итак:

$python my_script.py
Не перенаправлено

$python my_script.py > output.txt
Перенаправление!

4b9b3361

Ответ 1

Собственно, вы хотите сделать это, если узнать, что 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. Как правило, на окнах они подделываются с хешем чего-то, чтобы этот точный шаблон дизайна работал.

Ответ 2

import sys

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

Ответ 3

Посмотрите

os.isatty(fd)  

(я не думаю, что это работает в Windows, однако)