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@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a