В простом Python script, предназначенном для запуска из оболочки, могу ли я уверенно определить, был ли sys.stdin перенаправлен из фактического файла или потокового из другого процесса?
Я хочу изменить поведение во время выполнения в зависимости от того, идет ли stdin из файла данных или потоковой передачи из другого процесса через канал.
Как и ожидалось, isatty()
возвращает False в обоих случаях. Вот быстрый тест isatty()
:
# test.py
import os
import sys
print sys.stdin.isatty()
print os.isatty(sys.stdin.fileno())
Тестирование:
python test.py < file.txt
дает:
False
False
и
ls -al | python test.py
дает:
False
False
Есть ли питонический метод для этого?
Спецификация Unix/Linux в порядке, хотя было бы неплохо узнать, можно ли это сделать переносимым образом.
Изменить: Примечание в ответ комментаторам: Почему меня это волнует? Ну, в моем случае я хочу иметь дело с данными с меткой времени, которые поступают с нерегулярными интервалами, когда они передаются из другого процесса; когда я воспроизвожу предварительно записанные данные из файла, я хотел бы воспроизвести его с помощью фиксированных или переменных задержек.
Я согласен, что, возможно, выгодно использовать более чистый метод (и я могу думать о нескольких, включая промежуточный script, для вставки задержек в потоке воспроизведения), но мне бесконечно интересно.