Re: [Python] python e classi

2016-08-11 Per discussione Giuliano Curti
ciao,
intanto grazie della risposta;

On 8/11/16, Riccardo Magliocchetti  wrote:
> Il 11/08/2016 22:00, Giuliano Curti ha scritto:
>> ciao a tutti,
>>
>> ..
>> spero di riuscire a circoscrivere il problema, tenendomi sul generale:
>
> Più ti tieni sul generale, meno specifiche saranno le risposte :|
>
> ..
>
> Son due le cose: o hai modellato male le tue classi per il problema che vuoi
> risolvere oppure ti stai spiegando male :)

o tutte e due le cose :-) :-)


> Se B eredita da A, A non deve sapere niente di B. Se posti le classi, anche
> una
> versione ridotta giusto per capire di cosa stai parlando, magari è più
> facile
> aiutarti.

sto implementando una libreria per trattare i grafi; è un esercizio a
scopo autodidattico da cui avrei voluto tenervi indenni, ma.
ovviamente qualsiasi hint anche sullo specifico dei grafi è benvenuto;
tornando al dunque:

allora, ho generato la classe Graph() che ha una certa struttura dati
ed implementa alcuni metodi; argomento molto legato, ma non
coincidente, è quello dei grafi orientati ed ho generato la classe
Digraph() che si basa sulla prima, ne incrementa la struttura dati
(aggiunge delle liste non necessarie per i grafi), eredita i metodi
della precedente ed implementa alcuni metodi specifici, ad es. sui
flussi;

orbene, per un (noto) teorema una forma di connettività dei grafi
(siamo nella classe Graph()) corrisponde ad una forma particolare di
calcolo di flusso (metodo disponibile nella classe Digraph()), da quì
la domanda di come attingere a metodi della classe derivata Digraph()
all'interno della classe Graph();

è ovvio che potrei duplicare i metodi, ma mi sembrerebbe più elegante,
e soprattutto manutenibile, avere una procedura sola ed usarla laddove
serve;

spero di aver migliorato l'esposizione, anche in risposta alla
richiesta di Manlio di partire dal problema :-)


> --
> Riccardo Magliocchetti
> @rmistaken

grazie ancora, ciao,
giuliano
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] python e classi

2016-08-11 Per discussione Giuliano Curti
On 8/11/16, Giuliano Curti  wrote:
> ciao,
> intanto grazie della risposta;
> ...

oopss... aggiungo, a maggior chiarimento spero;

non ci ancora ben pensato, ma forse potrei anche prevedere una classe
somma delle strutture e dei metodi delle due, però non mi
dispiacerebbe tenere anche l'utente indenne dai dettagli: la procedura
interessata della classe Graph() clona la sua struttura in una classe
Digraph(), completa con i dati necessari, esegue il calcolo e
distrugge i dati temporanei, dando all'utente il dato che si aspetta;


grazie ancora, ciao,
giuliano
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] python e classi

2016-08-11 Per discussione Manlio Perillo
2016-08-11 22:00 GMT+02:00 Giuliano Curti :
> ciao a tutti,
>
> ho bisogno del vostro aiuto, in particolare sulla gestione delle
> classi (per favore non date per scontato niente perchè sono
> autodidatta e questo è per me argomento nuovo e particolarmente ostico
> :-)
> [...]
> ora però ho bisogno che la classe A utilizzi dei metodi della classe
> B, quindi intravedo questa situazione:


Tieni presente che il paradigma ad oggetti (o meglio, il paradigma ad
oggetti come è implementato nei limguaggi principali), non è l'unico
modo per modellare un problema.

Invece di partire dal modello e cercare di adattarlo (spesso
forzatamente) al problema, parti dal problema e trova il modello che
lo gestisce meglio.
Nel tuo caso, quale è il problema che stai cercando di risolvere?

> [...]

Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] python e classi

2016-08-11 Per discussione Riccardo Magliocchetti

Il 11/08/2016 22:00, Giuliano Curti ha scritto:

ciao a tutti,

ho bisogno del vostro aiuto, in particolare sulla gestione delle
classi (per favore non date per scontato niente perchè sono
autodidatta e questo è per me argomento nuovo e particolarmente ostico
:-)
spero di riuscire a circoscrivere il problema, tenendomi sul generale:


Più ti tieni sul generale, meno specifiche saranno le risposte :|


ho bisogno di due classi A e B, la B è una derivata da A, quindi ne
eredita struttura dati e metodi; le due classi hanno una loro dignità
quindi, anche se la seconda è derivata dalla prima, non si
sovrappongono;
ora però ho bisogno che la classe A utilizzi dei metodi della classe
B, quindi intravedo questa situazione:
A usa qualche volta B
B usa sempre A
che composta diventa:
A usa qualche volta B che usa sempre A
e mi sembra poco elegante; mi chiedevo se esiste qualche soluzione più
lineare e snella che la mia incompetenza mi nasconde;


Son due le cose: o hai modellato male le tue classi per il problema che vuoi 
risolvere oppure ti stai spiegando male :)


Se B eredita da A, A non deve sapere niente di B. Se posti le classi, anche una 
versione ridotta giusto per capire di cosa stai parlando, magari è più facile 
aiutarti.



--
Riccardo Magliocchetti
@rmistaken

http://menodizero.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] python e classi

2016-08-11 Per discussione Giuliano Curti
ciao a tutti,

ho bisogno del vostro aiuto, in particolare sulla gestione delle
classi (per favore non date per scontato niente perchè sono
autodidatta e questo è per me argomento nuovo e particolarmente ostico
:-)
spero di riuscire a circoscrivere il problema, tenendomi sul generale:
ho bisogno di due classi A e B, la B è una derivata da A, quindi ne
eredita struttura dati e metodi; le due classi hanno una loro dignità
quindi, anche se la seconda è derivata dalla prima, non si
sovrappongono;
ora però ho bisogno che la classe A utilizzi dei metodi della classe
B, quindi intravedo questa situazione:
A usa qualche volta B
B usa sempre A
che composta diventa:
A usa qualche volta B che usa sempre A
e mi sembra poco elegante; mi chiedevo se esiste qualche soluzione più
lineare e snella che la mia incompetenza mi nasconde;

grazie dell'attenzione, ciao,
giuliano
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Python e SSH

2016-08-11 Per discussione Manlio Perillo
2016-08-11 18:44 GMT+02:00 Manlio Perillo :
> 2016-08-11 18:11 GMT+02:00 Zanon Samuele :
> [...]
> Vedi ad esempio:
> https://gist.github.com/perillo/8c492a6a021e71034b1c33fb085a6679
>
> Se vuoi anche l'exit status probabilmente (non ho mai usato paramiko)
> devi fare qualcosa del genere:
> https://gist.github.com/perillo/8c492a6a021e71034b1c33fb085a6679
>

I link sono incorretti.
La prima versione è:
https://gist.github.com/perillo/8c492a6a021e71034b1c33fb085a6679/49e210731fd193b6774c2364440cec3c415a0cc5

La seconda, con il supporto per l'exit status:
https://gist.github.com/perillo/8c492a6a021e71034b1c33fb085a6679/6457a228fdc8107bfdbe0ac626cb530ea01894f9


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Python e SSH

2016-08-11 Per discussione Manlio Perillo
2016-08-11 18:11 GMT+02:00 Zanon Samuele :
>
> [...]
>
> Ciao,
> intanto grazie per le risposte. Cerco di essere più chiaro:
> ho la necessità di effettuare delle operazioni su dei server.
> Devo eseguire una serie di comandi, in sequenza, per poter eseguire
> correttamente
> queste operazioni (comandi tipo cd, eseguire script php...).
> Per scopo di verifica ho la necessita di avere l'output di ogni singolo
> comando, anche se vuoto.
> Tutte le operazioni, sulla classe che ho linkato, le salvo su
> SSHBaseCommand.commands
> che poi viene letto e crea i record su  un database postgres. Questo avviene
> attraverso una
> classe che estende SSHBaseCommand.
>
> Ho provato a modificare SSHBaseCommand secondo i consigli di Manlio, ma
> credo ci sia
> qualcosa che mi sfugge: se eseguo un comando, anche un semplice "ls -la",
> quello che
> recupero in output è un qualcosa che non è quello che mi aspetto.

Il problema è che tu esegui i comandi tramite la shell.
In questo modo non hai modo di sapere quando termina l'output di un comando.
La shell va usata solo se devi eseguire comandi in modalità interattiva.

Devi usare exec_command, invece di invoke_shell.
Vedi ad esempio:
https://gist.github.com/perillo/8c492a6a021e71034b1c33fb085a6679

Se vuoi anche l'exit status probabilmente (non ho mai usato paramiko)
devi fare qualcosa del genere:
https://gist.github.com/perillo/8c492a6a021e71034b1c33fb085a6679


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Python e SSH

2016-08-11 Per discussione Zanon Samuele
Il giorno 11 agosto 2016 17:19, Manlio Perillo 
ha scritto:

> 2016-08-11 17:04 GMT+02:00 Manlio Perillo :
> > 2016-08-11 16:47 GMT+02:00 Zanon Samuele :
> >>
> >> Ciao a tutti,
> >> sto realizzando un pannello per la gestione di alcuni processi interni
> >> all'ufficio utilizzando django e celery per la gestione della coda dei
> >> processi.
> >> Ora il mio problema è collegarmi ai server via SSH, eseguire una
> sequenza
> >> di comandi (alcuni anche come root, quindi ho la necessità di poter
> passare
> >> la password di root al comando su), catturare l'output di ciascun
> comando e
> >> salvare l'output su db.
> > [...]
> >> Potete darmi una mano a modificare quella classe per poter ottenere il
> >> risultato che mi aspetto? Oppure dirmi qualche altra libreria poter
> >> utilizzare?
> >>
> >
> > Come detto, l'organizzazione del codice è sbagliata.
> > Innanzitutto non capisco cosa faccia il codice.
> > Vuoi inviare un comando e ricevere la risposta?  In questo caso dovresti
> > utilizzare una coda (threading.Queue).
> >
>
> Se intendi gestire un solo comando alla volta, probabilmente non hai
> bisogno di complicarti la vita con i thread.
> Non eseguire process in un thread, ed invece aggiungi un metodo send_cmd
> che:
>
> 1) Alloca una shell se non è già stato fatto
> 2) Invia il comando alla shell
> 3) Legge la risposta
> 4) Restituisce la risposta
>
> Inoltre ti consiglio anche di evidenziare, nel codice, quali sono i
> metodi/funzioni pubblici e quali quelli privati.
> Nel tuo caso il metodo open_shell è privato, quindi rinominalo _open_shell.
>
>
> Ciao  Manlio
>

Ciao,
intanto grazie per le risposte. Cerco di essere più chiaro:
ho la necessità di effettuare delle operazioni su dei server.
Devo eseguire una serie di comandi, in sequenza, per poter eseguire
correttamente
queste operazioni (comandi tipo cd, eseguire script php...).
Per scopo di verifica ho la necessita di avere l'output di ogni singolo
comando, anche se vuoto.
Tutte le operazioni, sulla classe che ho linkato, le salvo su
 SSHBaseCommand.commands
che poi viene letto e crea i record su  un database postgres. Questo
avviene attraverso una
classe che estende SSHBaseCommand.

Ho provato a modificare SSHBaseCommand secondo i consigli di Manlio, ma
credo ci sia
qualcosa che mi sfugge: se eseguo un comando, anche un semplice "ls -la",
quello che
recupero in output è un qualcosa che non è quello che mi aspetto.
Per esempio ho provato a collegarmi al server, mi sposto su una cartella e
faccio ls -la

cmd = SSHCommand(server.host, server.ssh_user,
 server.ssh_password)
cmd.send_cmd('cd /www/html')
cmd.send_cmd('ls -la')

In output vedo rispettivamente (un output per riga):
Last login Thu Aug 11 17:45:15 2016
Linux 3.2.29.\r\n

Ho aggiornato il gist con la nuova versione della classe.

Altra cosa: mi sarebbe utile avete l'exit code dei singoli comandi. Come
posso fare?

Ciao e grazie mille

___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Python e SSH

2016-08-11 Per discussione Manlio Perillo
2016-08-11 17:04 GMT+02:00 Manlio Perillo :
> 2016-08-11 16:47 GMT+02:00 Zanon Samuele :
>>
>> Ciao a tutti,
>> sto realizzando un pannello per la gestione di alcuni processi interni
>> all'ufficio utilizzando django e celery per la gestione della coda dei
>> processi.
>> Ora il mio problema è collegarmi ai server via SSH, eseguire una sequenza
>> di comandi (alcuni anche come root, quindi ho la necessità di poter passare
>> la password di root al comando su), catturare l'output di ciascun comando e
>> salvare l'output su db.
> [...]
>> Potete darmi una mano a modificare quella classe per poter ottenere il
>> risultato che mi aspetto? Oppure dirmi qualche altra libreria poter
>> utilizzare?
>>
>
> Come detto, l'organizzazione del codice è sbagliata.
> Innanzitutto non capisco cosa faccia il codice.
> Vuoi inviare un comando e ricevere la risposta?  In questo caso dovresti
> utilizzare una coda (threading.Queue).
>

Se intendi gestire un solo comando alla volta, probabilmente non hai
bisogno di complicarti la vita con i thread.
Non eseguire process in un thread, ed invece aggiungi un metodo send_cmd che:

1) Alloca una shell se non è già stato fatto
2) Invia il comando alla shell
3) Legge la risposta
4) Restituisce la risposta

Inoltre ti consiglio anche di evidenziare, nel codice, quali sono i
metodi/funzioni pubblici e quali quelli privati.
Nel tuo caso il metodo open_shell è privato, quindi rinominalo _open_shell.


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Python e SSH

2016-08-11 Per discussione Manlio Perillo
2016-08-11 16:47 GMT+02:00 Zanon Samuele :

> Ciao a tutti,
> sto realizzando un pannello per la gestione di alcuni processi interni
> all'ufficio utilizzando django e celery per la gestione della coda dei
> processi.
> Ora il mio problema è collegarmi ai server via SSH, eseguire una sequenza
> di comandi (alcuni anche come root, quindi ho la necessità di poter passare
> la password di root al comando su), catturare l'output di ciascun comando e
> salvare l'output su db.
> Ho provato ad utilizzare paramiko per collegarmi al server sfruttando la
> classe che trovate qui
>  ma ho i
> seguenti problemi:
>

Il programma mi sembra sbagliato.
Usi un thread, ma l'accesso alle variabili condivise non è sincronizzato.


>- Nel dizionario dove colleziono tutti i comandi non mi viene inserito
>il comando che specifico in send_shell
>
>
Quale dizionario? cmd nel metodo process?
Come dovrebbe funzionare?

>
>- Nel database quando salvo i comandi ho come valore di output solo la
>riga di input della console ssh, non tutto l'output che mi aspetto dei vari
>comandi
>
>
Quale database? SSHBaseCommand.commands

>
>- Alle volte sembra perdere i comandi e mi da un output differente ad
>ogni chiamata
>
> Potete darmi una mano a modificare quella classe per poter ottenere il
> risultato che mi aspetto? Oppure dirmi qualche altra libreria poter
> utilizzare?
>
>
Come detto, l'organizzazione del codice è sbagliata.
Innanzitutto non capisco cosa faccia il codice.
Vuoi inviare un comando e ricevere la risposta?  In questo caso dovresti
utilizzare una coda (threading.Queue).



Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Python e SSH

2016-08-11 Per discussione Zanon Samuele
Ciao a tutti,
sto realizzando un pannello per la gestione di alcuni processi interni
all'ufficio utilizzando django e celery per la gestione della coda dei
processi.
Ora il mio problema è collegarmi ai server via SSH, eseguire una sequenza
di comandi (alcuni anche come root, quindi ho la necessità di poter passare
la password di root al comando su), catturare l'output di ciascun comando e
salvare l'output su db.
Ho provato ad utilizzare paramiko per collegarmi al server sfruttando la
classe che trovate qui
 ma ho i
seguenti problemi:

   - Nel dizionario dove colleziono tutti i comandi non mi viene inserito
   il comando che specifico in send_shell
   - Nel database quando salvo i comandi ho come valore di output solo la
   riga di input della console ssh, non tutto l'output che mi aspetto dei vari
   comandi
   - Alle volte sembra perdere i comandi e mi da un output differente ad
   ogni chiamata

Potete darmi una mano a modificare quella classe per poter ottenere il
risultato che mi aspetto? Oppure dirmi qualche altra libreria poter
utilizzare?

Uso python 3.5.

Grazie mille per l'aiuto


--
mailto: webs86 AT gmail DOT com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python