<div dir="ltr"><div class="gmail_extra"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><br></div></div></div></div><div class="gmail_quote">Il giorno 11 agosto 2016 17:19, Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com" target="_blank">manlio.perillo@gmail.com</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="">2016-08-11 17:04 GMT+02:00 Manlio Perillo <<a href="mailto:manlio.perillo@gmail.com">manlio.perillo@gmail.com</a>>:<br>
> 2016-08-11 16:47 GMT+02:00 Zanon Samuele <<a href="mailto:webs86@gmail.com">webs86@gmail.com</a>>:<br>
>><br>
>> Ciao a tutti,<br>
>> sto realizzando un pannello per la gestione di alcuni processi interni<br>
>> all'ufficio utilizzando django e celery per la gestione della coda dei<br>
>> processi.<br>
>> Ora il mio problema è collegarmi ai server via SSH, eseguire una sequenza<br>
>> di comandi (alcuni anche come root, quindi ho la necessità di poter passare<br>
>> la password di root al comando su), catturare l'output di ciascun comando e<br>
>> salvare l'output su db.<br>
</span>> [...]<br>
<span class="">>> Potete darmi una mano a modificare quella classe per poter ottenere il<br>
>> risultato che mi aspetto? Oppure dirmi qualche altra libreria poter<br>
>> utilizzare?<br>
>><br>
><br>
> Come detto, l'organizzazione del codice è sbagliata.<br>
> Innanzitutto non capisco cosa faccia il codice.<br>
> Vuoi inviare un comando e ricevere la risposta?  In questo caso dovresti<br>
> utilizzare una coda (threading.Queue).<br>
><br>
<br>
</span>Se intendi gestire un solo comando alla volta, probabilmente non hai<br>
bisogno di complicarti la vita con i thread.<br>
Non eseguire process in un thread, ed invece aggiungi un metodo send_cmd che:<br>
<br>
1) Alloca una shell se non è già stato fatto<br>
2) Invia il comando alla shell<br>
3) Legge la risposta<br>
4) Restituisce la risposta<br>
<br>
Inoltre ti consiglio anche di evidenziare, nel codice, quali sono i<br>
metodi/funzioni pubblici e quali quelli privati.<br>
Nel tuo caso il metodo open_shell è privato, quindi rinominalo _open_shell.<br>
<br>
<br>
Ciao  Manlio<br></blockquote><div><br></div><div>Ciao,</div><div>intanto grazie per le risposte. Cerco di essere più chiaro:</div><div>ho la necessità di effettuare delle operazioni su dei server.</div><div>Devo eseguire una serie di comandi, in sequenza, per poter eseguire correttamente</div><div>queste operazioni (comandi tipo cd, eseguire script php...).</div><div>Per scopo di verifica ho la necessita di avere l'output di ogni singolo comando, anche se vuoto.</div><div>Tutte le operazioni, sulla classe che ho linkato, le salvo su  SSHBaseCommand.commands</div><div>che poi viene letto e crea i record su  un database postgres. Questo avviene attraverso una</div><div>classe che estende SSHBaseCommand.</div><div><br></div><div>Ho provato a modificare SSHBaseCommand secondo i consigli di Manlio, ma credo ci sia </div><div>qualcosa che mi sfugge: se eseguo un comando, anche un semplice "ls -la", quello che </div><div>recupero in output è un qualcosa che non è quello che mi aspetto.</div><div>Per esempio ho provato a collegarmi al server, mi sposto su una cartella e faccio ls -la</div><div><br></div><div><div><font face="monospace, monospace">cmd = SSHCommand(server.host, server.ssh_user,</font></div><div><font face="monospace, monospace">                 server.ssh_password)</font></div></div><div><font face="monospace, monospace">cmd.send_cmd('cd /www/html')<br>cmd.send_cmd('ls -la')<br></font></div><div><br></div><div>In output vedo rispettivamente (un output per riga):</div><div><span style="font-family:monospace,monospace">Last login </span><font face="monospace, monospace">Thu Aug 11 17:45:15 2016</font><br style="font-family:monospace,monospace"><font face="monospace, monospace">Linux 3.2.29.\r\n</font><br></div><div><br></div><div>Ho aggiornato il gist con la nuova versione della classe.</div><div><br></div><div>Altra cosa: mi sarebbe utile avete l'exit code dei singoli comandi. Come posso fare?</div><div><br></div><div>Ciao e grazie mille</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
______________________________<wbr>_________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" rel="noreferrer" target="_blank">http://lists.python.it/<wbr>mailman/listinfo/python</a><br>
</blockquote></div><br></div></div>