Проверить, пуст ли стандартный вывод? (Проблема с stdout и readline())

Проблема в том, что мой код зависает в цикле for этой функции. Эта функция вызывается как отдельный поток в более крупном основном сценарии. После ввода пользователем основной скрипт устанавливает self.kill_switch.

Этот код отлично работает, когда стандартный вывод имеет непрерывный вывод. проблема возникает, когда стандартный вывод пуст, код зависает на for line in iter(lambda: stdout.readline(), ""): до тех пор, пока стандартный вывод не получит строку данных. Как только stdout получает информацию, он записывает строку данных, проверяет условие kill_switch и завершает работу в соответствии с ним. Как установить тайм-аут на for line или проверить, пуст ли стандартный вывод?

Есть ли способ установить оператор if для передачи кода, если стандартный вывод пуст?

def remote_connection(self):
    stdin, stdout, stderr = self.ssh.exec_command('python main_script.py', get_pty=True)
    while not self.kill_switch.is_set():
        for line in iter(lambda: stdout.readline(), ""):
            self.data.put(line)
            break
    self.ssh.exec_command('\x003', get_pty=True)

person gvega    schedule 16.11.2018    source источник
comment
Взгляните на: stackoverflow.com/questions/31834743/ Аналогичный вариант использования   -  person seayak    schedule 17.11.2018
comment
Спасибо. Я рассмотрел этот случай ранее и реализовал второй комментарий. Добавление get_pty=True позволило мне прочитать одну строку, а затем продолжить код. Однако код по-прежнему останавливается, пока не появится строка кода для вывода. то есть цикл for по-прежнему требует некоторого вывода, прежде чем он продолжится, а не просто вернет пустую строку.   -  person gvega    schedule 17.11.2018
comment
Предположим, что stdout получит строку hello\n через десять минут. Что бы вы stdout.readline() вернули сейчас, до истечения десяти минут?   -  person torek    schedule 17.11.2018
comment
В идеале он ничего не получит, а просто pass, когда в stdout нет вывода. Я думаю, что это позволит продолжить выполнение кода и проверить переключатель. Используя этот метод, я бы просто использовал гораздо более короткие тайм-ауты, чтобы чаще проверять стандартный вывод.   -  person gvega    schedule 19.11.2018