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()
Pourquoi stdout.read() se bloque si l'utilisation dierectly sans vérifier stdout. channel.recv_ready(): in alors que stdout.channel.exit_status_ready():
Pour mon cas, après l'exécution de la commande sur le serveur distant, la session attend l'entrée de l'utilisateur, après mettre 'q', il va fermer la connexion. Mais avant d'entrer 'q', le stdout.read() va attendre EOF, il semble que cette méthode ne fonctionne pas si le buffer est plus grand.
- J'ai essayé stdout.read (1) alors que, cela fonctionne
J'ai essayé stdout.readline() dans tout, cela fonctionne aussi.
stdin, stdout, stderr = ssh.exec_command ('/ Users/lteue/Téléchargements/uecontrol')
stdout.read() se bloque
La question est vieux, mais pour les gens qui viennent encore via google search je veux leur donner ceci.La clé est d'obtenir votre propre ** canal ** [Exécuter des commandes interactives en Python via Paramiko Partie 1] (https://www.youtube.com/watch?v=Jc2l- n_GYPI) [Exécution des commandes interactives en Python via Paramiko Partie 2] (https://www.youtube.com/watch?v=lLKdxIu3-A4) Dans ces deux vidéos, il est expliqué comment exécuter des commandes interactives via paramiko en particulier la deuxième vidéo est super et probablement ce dont vous avez besoin. –