Проверить, пустой ли stdout? (Проблема с stdout и readline ()) - PullRequest
0 голосов
/ 17 ноября 2018

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

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

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

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)
...