Здравствуйте, Все, у меня возникла небольшая проблема. Может быть, я пропустил что-то очевидное, но я не могу понять проблему. У меня есть GUI, где у меня есть кнопка с именем «erp», и если я нажму на нее, то она должна сначала сделать ssh
машине с именем (имя хоста) 'ayaancritbowh91302xy'
, а затем она должна выполнить команды типа (cd change dir) и 'ls -l'
. Я попытался следующий код:ssh с Subprocess.popen
def erptool():
sshProcess = subprocess.Popen(['ssh -T', 'ayaancritbowh91302xy'],stdin=subprocess.PIPE, stdout = subprocess.PIPE)
sshProcess.stdin.write("cd /home/thvajra/transfer/08_sagarwa\n")
sshProcess.stdin.write("ls -l\n")
sshProcess.stdin.write("echo END\n")
for line in stdout.readlines():
if line == "END\n":
break
print(line)
я получил следующее сообщение об ошибке:
Traceback (most recent call last):
File "Cae_Selector.py", line 34, in erptool
for line in stdout.readlines():
NameError: global name 'stdout' is not defined
Pseudo-terminal will not be allocated because stdin is not a terminal.
Как это сделать? Кто-нибудь может мне с этим помочь?
начало с исправления ошибки stdout: попробуйте добавить «из sys import stdout» или изменить его на sshProcess.stdout, если это то, что вы имеете в виду. –
рассмотреть возможность добавления '-T' после 'ssh', так что ssh даже не попытается выделить псевдотерминал. –
Я использовал '-t' после ssh, теперь я получил следующую ошибку: Файл «Cae_Selector.py», строка 35, в erptool для строки в stdout.readlines(): IOError: Файл не открыт для чтения Использование: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-c bind_address] [-c cipher_spec] [-D [bind_address:] port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-L [bind_address:] port: host: hostport] [-l имя_файла] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q cipher | cipher-auth | mac | kex | ke – ayaan