Справочная информация : Я использую python и paramiko для автоматизации процесса, через который я прохожу каждый раз, когда мне приходится сдавать программа для занятия. Мы используем команду под названием «handin» для отправки исходного кода, но это должно быть сделано со школьного компьютера. Поэтому, когда я отправляю код из дома, я должен: sftp на школьные серверы, поместить файлы в каталог, ssh на школьный компьютер, использовать команду 'handin'
. Я могу успешно помещать файлы на школьные машины. Проблема возникает, когда я пытаюсь использовать exec_command («передать мои файлы»), а затем читаю вывод, чтобы определить следующее действие.
так что у меня есть
try:
(stdin, stdout, stderr) = client.exec_command(s)
except:
print 'whoops'
sys.exit()
print stdout.readlines()
Но это по какой-то причине приводит к тупиковой ситуации, скрипт, кажется, ничего не делает, и мне приходится в конечном итоге убить весь процесс (ctrl + c не работает). Я не уверен, что exec_command не завершается правильно (даже если он выходит из блока try / catch) или у меня проблемы с сетью или что-то в этом роде.
Есть идеи?
обновление:
Проблема заключается во взаимодействии с командой handin во время выполнения. После выполнения команды handin может все еще работать, а может и не работать. Если это первая отправка, он говорит об успехе, бла-бла и завершает выполнение. Все хорошо. Но если я отправляю повторно, я должен разрешить перезапись (stdin.write ('y')) для каждого файла.
TL / DR:
Как мне проверить, что exec_command () все еще выполняется, ожидает ввода и, соответственно, readline () из stdout?