Проблема в том, что мой код зависает в цикле 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)
hello\n
через десять минут. Что бы выstdout.readline()
вернули сейчас, до истечения десяти минут? - person torek   schedule 17.11.2018pass
, когда в stdout нет вывода. Я думаю, что это позволит продолжить выполнение кода и проверить переключатель. Используя этот метод, я бы просто использовал гораздо более короткие тайм-ауты, чтобы чаще проверять стандартный вывод. - person gvega   schedule 19.11.2018