передача команд в PUTTY - PullRequest
0 голосов
/ 01 мая 2018

Я использую следующий код, чтобы открыть терминал замазки и передать команду. Терминал открывается нормально, но дальше ничего не происходит. Сценарий просто останавливается, пока я не закрою терминал. Что может вызвать проблемы здесь?

import subprocess, time
test=subprocess.Popen('"C:\Program Files (x86)\PuTTY\putty.exe" -ssh -X -I
        p:\.ssh\id_dsa.ppk my_name@my_host', 
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE)
test.stdin.write("ls\n")
test.stdin.flush()
test.stdin.close()
stdout_value = test.stdout.read()
print repr(stdout_value)
print 'done'

1 Ответ

0 голосов
/ 01 мая 2018

putty.exe не читает со стандартного ввода и не записывает в стандартный вывод. Это эмулятор терминала, поэтому он принимает ввод с клавиатуры и пишет в окно своего приложения.

Если вы хотите передать данные через стандартные дескрипторы ввода и вывода в соединение ssh, используйте программу plink.exe, входящую в пакет PuTTY. (Он будет в том же каталоге, что и putty.exe.) Это не эмулятор терминала, он просто устанавливает ssh-соединение и затем запускает stdin и stdout, аналогично традиционной команде ssh в Unix-подобных системах.

Возможно, вы даже сможете запустить ssh вместо plink, в зависимости от того, какая у вас версия Windows и какие дополнительные пакеты вы установили.

Кроме того, я считаю, что и plink, и ssh хотят -i (нижний регистр), а не -I (верхний регистр) в качестве опции для указания файла ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...