[Python] popen e netuse
Filadelfo Fiamma
philosganga a gmail.com
Gio 26 Maggio 2011 12:01:38 CEST
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
Maggiori informazioni sulla lista
Python