2010-07-09 23 views
12

Lancio uno script di shell da una macchina Linux remota utilizzando paramiko. Lo script della shell viene lanciato ed esegue un comando make -j8. Comunque il comando exec_command ritorna prima del completamento del make.paramiko SSH exec_command (script di shell) restituisce prima del completamento

Se lancio lo script sul computer locale, viene eseguito correttamente.

Qualcuno potrebbe spiegarmi questo comportamento?

risposta

21

È necessario attendere il completamento dell'applicazione, exec_command non è una chiamata di blocco.

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

Qual è lo scopo di quelli ora()? Sembra che verranno tutti eseguiti molto rapidamente uno dopo l'altro? Stai dicendo di aspettare che l'applicazione finisca, avresti bisogno di un 'while non di channel.recv_exit_status():' wait loop? Se è così, una volta recv_exit_status() restituisce True, è garantito che stdout.channel.recv_ready() è True se ci saranno dati sullo stdout? Sembra che a volte questo non sia il caso. –

+1

questo comportamento è documentato [qui] (http://paramiko-docs.readthedocs.org/en/latest/api/channel.html#paramiko.channel.Channel.recv_exit_status) – miraculixx

+0

stranamente, usando stdout.channel.recv_exit_status() blocca il mio codice per sempre –

Problemi correlati