ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server_IP,22,username, password)
stdin, stdout, stderr = ssh.exec_command('/Users/lteue/Downloads/uecontrol-CXC_173_6456-R32A01/uecontrol.sh -host localhost ')
alldata = ""
while not stdout.channel.exit_status_ready():
solo_line = ""
# Print stdout data when available
if stdout.channel.recv_ready():
# Retrieve the first 1024 bytes
solo_line = stdout.channel.recv(1024)
alldata += solo_line
if(cmp(solo_line,'uec> ') ==0): #Change Conditionals to your code here
if num_of_input == 0 :
data_buffer = ""
for cmd in commandList :
#print cmd
stdin.channel.send(cmd) # send input commmand 1
num_of_input += 1
if num_of_input == 1 :
stdin.channel.send('q \n') # send input commmand 2 , in my code is exit the interactive session, the connect will close.
num_of_input += 1
print alldata
ssh.close()
Por qué la stdout.read() colgará si el uso dierectly sin comprobar la salida estándar. channel.recv_ready(): en while stdout.channel.exit_status_ready():
En mi caso, después de ejecutar el comando en el servidor remoto, la sesión está esperando la entrada del usuario, después de en pon 'q', cerrará la conexión. Pero antes de ingresar 'q', el stdout.read() esperará EOF, parece que este método no funciona si el buffer es más grande.
- me trataron stdout.read (1) en el tiempo, funciona
Probé stdout.readline() en el tiempo, funciona también.
stdin, stdout, stderr = ssh.exec_command ('/ Usuarios/lteue/Descargas/uecontrol')
stdout.read() colgará
La pregunta es viejo, pero para las personas que todavía vienen aquí a través de la búsqueda en google, quiero darles esto. La clave es obtener su propio ** canal ** [Ejecutar comandos interactivos en Python a través de Paramiko Parte 1] (https://www.youtube.com/watch?v=Jc2l- n_GYPI) [Ejecución de comandos interactivos en Python a través de Paramiko Parte 2] (https://www.youtube.com/watch?v=lLKdxIu3-A4) En estos dos videos se explica cómo ejecutar comandos interactivos a través de paramiko, especialmente el segundo video es genial y probablemente lo que necesitas. –