isatty () всегда возвращает False?

#python-3.x

#python-3.x

Вопрос:

Я хочу передавать данные через stdin в скрипт Python для дальнейшей обработки. Команда:

 tail -f /home/pi/ALL.TXT | python3 ./logcheck.py
  

И код Python является:

 import sys

while 1:
    if (sys.stdin.isatty()):
        for line in sys.stdin:
            print(line)
  

Я хочу, чтобы код непрерывно просматривал stdin , а затем обрабатывал каждую строку при получении. tail Команда работает при самостоятельном запуске, но скрипт python никогда ничего не выводит.

Проверка, isatty() кажется, что оно всегда возвращает False ?

Помогите!

Комментарии:

1. Потому что stdin не является tty, когда вы загружаете в него данные. Почему вы ожидаете, что это вернет true?

2. В других руководствах предлагалось, что isatty имеет значение true при передаче по каналу, false в противном случае. Как еще я могу проверить?

Ответ №1:

TTY — это когда вы используете свой обычный терминал — например, открываете python в своей оболочке и вводите

 BASH>python
>>>from sys import stdin
>>>stdin.isatty() #True
  

В вашем случае стандартный ввод поступает из чего-то, что не является tty . Просто добавьте not в if инструкцию.