[Python] popen e netuse
Giampaolo Rodolà
g.rodola a gmail.com
Lun 6 Giu 2011 11:43:22 CEST
Non so di preciso cosa faccia net use ma se conosci il PID del
processo che ti aspetti che apra la connessione puoi utilizzare psutil
[1] per verificare che la connessione su un dato indirizzo:porta sia
attiva e in stato "established".
Esempio:
>>> import os, socket, psutil
>>> thisproc = psutil.Process(os.getpid())
>>> thisproc.get_connections()
[]
>>> sock = socket.create_connection(('google.it', 80))
>>> thisproc.get_connections()
[connection(fd=3, family=2, type=1, local_address=('10.0.0.1',
44467), remote_address=('74.125.39.104', 80), status='ESTABLISHED')]
>>>
[1] http://code.google.com/p/psutil/
Saluti,
--- Giampaolo
http://code.google.com/p/pyftpdlib/
http://code.google.com/p/psutil/
2011/5/26 Filadelfo Fiamma <philosganga a gmail.com>:
> Ciao a tutti,
>
> ho uno script Python che apre la connessione, sotto Winzozz, ad una
> cartella remota. Vado a sfruttare il comando di sistema net use per
> verificare lo stato della connessione, eventualmente rimuoverla e
> aggiungerla.
> Il problema che vi espongo nasce nel momento in cui lo stato della
> connessione passa da OK a DISCONNECTED, prima di addentrarmi nel
> problema vi mostro la sequenza dei comandi che vengono lanciati:
>
>
> #cmd = 'net use path_remoto password /USER: user /'
> #cmd = 'net use path_remoto password /DELETE'
> #cmd = 'net use'
>
> #Apre la popen
> def checkRemoteConnection(self,cmd):
> f = None
> try:
> f = os.popen(cmd)
> except Exception:
> print 'Problem in popen'
> self.writeLog('Problem in popen\n')
> return False
> else:
> self._file_popen = f
> return True
>
>
> #Interpreta il contenuto della popen, esaminando lo status
> def interpreter(self,fp,type='r'):
> l = fp.readlines()
> if(type == 'r'):
> for i in range(len(l)):
> if(len(l[i])>1):
> self.writeLog('interpreter: reading popen.. '+str(l[i])+'\n')
> if(str(l[i]).find(str(self.__remote_path))!=-1):
> if(str(l[i]).find('OK')!=-1):
> return True
> return False
> else:
> for i in range(len(l)):
> self.writeLog('interpreter: reading popen.. '+str(l[i])+'\n')
> return True
>
>
> #Controlla i due metodi soprastanti
> def isConnected(self, cmd, type = 'r'):
> if not self.checkRemoteConnection(cmd):
> return False
>
> if(self._file_popen!=None):
>
> self.writeLog('isConnected: Popen result is None\n')
> return False
> else:
> ret =self.interpreter(self._file_popen,type)
>
> if(self._file_popen!=None):
> try:
> self._file_popen.close()
> except Exception:
> print 'fp.close() : exception in close popen()'
>
> if(ret):
> return True
> else:
> return False
>
>
> Ho inoltre tre metodi (test(),submit(),delete()), che ometto, che non
> fanno altro che scrivere opportunamente la stringa cmd.
>
> if __name__ == '__main__':
>
> net = NetUse(user,pwd,remotepath)
>
> if(len(sys.argv)>1):
> if(len(sys.argv)==2):
> if(sys.argv[1]=='delete'):
> if(net.test()):
> if(net.delete()):
> print 'Connessione remota rimossa'
> else:
> print 'Impossibile rimuovere connessione remota'
> else:
> if(not net.test()):
> print 'Not connected'
> if(not net.submit()):
> print 'Error in connection'
> else:
> if(not net.test()):
> print 'Error in connection..try again'
> net.delete()
> time.sleep(2)
> net.submit()
> if(not net.test()):
> print 'Error in connection..'
> else:
> print 'Successfully Connected'
> else:
> print 'Successfully Connected'
> else:
> print 'Already Connected'
>
>
> Questo script, in caso di stato della connessione DISCONNECTED, mi
> restituusce un'eccezione su self._file_popen.close() (Metodo
> isConnected)
> Sapreste indicarmi se opero in modo sbagliato o se invece questa
> particolare situazione (STATUS DISCONNECTED) può essere gestita in
> modo differente ed indolore? Sottolineo che questo problema non lo
> riscontro su ogni macchina in cui viene eseguito, ma solo su alcune,
> senza apparente motivo.
>
> Vi ringrazio moltissimo
> Ciao e buona giornata
>
> FF
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
Maggiori informazioni sulla lista
Python