Sfondo: Sto usando python e paramiko per automatizzare il processo che passo ogni volta che devo consegnare un programma per una classe. Usiamo un comando chiamato "handin" per inviare il codice sorgente, ma questo deve essere fatto da un computer scolastico. Quindi, quando invio il codice da casa, devo: sftp nei server della scuola, mettere i file in una directory, ssh nel computer della scuola, usare il comando 'handin'Script paramiko Python, problemi durante la lettura dell'output durante exec_command()
Posso mettere con successo i file sulle macchine della scuola. Il problema si verifica quando provo a usare exec_command ("consegna i miei file") e poi leggo l'output per determinare l'azione successiva.
quindi devo
try:
(stdin, stdout, stderr) = client.exec_command(s)
except:
print 'whoops'
sys.exit()
print stdout.readlines()
Ma questo provoca una situazione di stallo per qualche ragione, lo script sembra essere non fare nulla e devo eventualmente uccidere l'intero processo (ctrl + c pretende molto lavoro). Non sono sicuro se exec_command non sta completando correttamente (anche se sta uscendo dal blocco try/catch) o se ho problemi di rete o cosa.
Qualche idea?
aggiornamento:
Il problema è interagenti con il comando handin durante l'esecuzione. Dopo aver eseguito il comando, handin potrebbe o potrebbe non essere ancora in esecuzione. Se è la prima volta che lo invia, dice il successo, bla bla, e termina l'esecuzione. Tutto bene. Ma se sto ri-invio devo autorizzare una sovrascrittura (stdin.write ('y')) per ogni file.
TL/DR:
Come si controlla se un exec_command() è ancora in esecuzione, in attesa di input, e readline() da stdout di conseguenza?
Avete una soluzione per TL/DR? Inoltre, come posso conoscere il testo prima di attendere l'input, ad es. @ password ... –