2010-07-09 3 views
12

Je lance un script shell depuis une machine Linux distante en utilisant paramiko. Le script shell est lancé et exécute une commande make -j8. Cependant, la commande exec_command retourne avant la fin de make.paramiko SS_ex_command (shell script) retourne avant la fin

Si je lance le script sur la machine locale, il s'exécute correctement.

Quelqu'un pourrait-il m'expliquer ce comportement?

Répondre

21

Vous devez attendre que l'application se termine, exec_command n'est pas un appel bloquant.

print now(), "before call" 
stdin, stdout, sterr = ssh.exec_command("sleep(10)") 
print now(), "after call" 
channel = stdout.channel 
print now(), "before status" 
status = channel.recv_exit_status() 
print now(), "after status" 
+2

Quel est le but de ces now()? Il semble qu'ils vont tous courir très vite les uns après les autres? Voulez-vous attendre que l'application se termine, vous auriez besoin d'un 'while while channel.recv_exit_status():' wait loop? Si c'est le cas, une fois que recv_exit_status() renvoie True, est-il garanti que stdout.channel.recv_ready() est True s'il y a des données sur stdout? Il semble que parfois ce n'est pas le cas. –

+1

ce comportement est documenté [ici] (http://paramiko-docs.readthedocs.org/en/latest/api/channel.html#paramiko.channel.Channel.recv_exit_status) – miraculixx

+0

bizarrement, en utilisant stdout.channel.recv_exit_status() bloque mon code pour toujours –