IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Python / Sqlplus / popen


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 58
    Par défaut Python / Sqlplus / popen
    Bonjour,

    J'ai un problème avec un script python. Ce script est utilisé pour envoyer une requête SQLplus via une nouvelle connexion.
    Le problème est que parfois le script part en timeout, et je n'arrive pas à savoir pourquoi.
    Pouvez-vous m'aider?

    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
            output=''
            if self._conf.db_servicename==None:
                connectdata='SID='+self._conf.db_sid
            else:
                connectdata='SERVICE_NAME='+self._conf.db_servicename
            instance='\'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST='+self._conf.db_host+')(PORT='+str(self._conf.db_port)+')))(CONNECT_DATA=('+connectdata+')))\''
            password=self._conf.db_password  
            command=self._sqlplusTool+' '+self._conf.db_login+'/'+password+'@'+instance
            temporaryIn,temporaryOut=os.popen4(command,'t',-1)  
            ''' read from a temporary connection '''
            temporaryIn.write(self._conf.getFlagCommand())
            temporaryIn.flush()
            out=temporaryOut.readline()
            line=''
            temporaryIn.write(request+"\n"+self._conf.getFlagCommand()+'\n')  
            temporaryIn.flush() 
            while not line.startswith(self._conf.getFlagRes()): 
                output+=line.replace ("\n\r","\n")
                line=temporaryOut.readline()
            temporaryOut.flush()
            temporaryOut.close()
            temporaryOut=None
     
            temporaryIn.flush()
            temporaryIn.close()
            temporaryIn=None
     
            return output

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Par défaut
    Bonjour,

    Je n'ai pas testé votre script python mais je peux vous donner quelques petites informations à propos du timeout... En python comme dans tout langage, le timeout permet de "temporiser" la connexion . Par exemple, lorsque nous effectuons une connexion avec un serveur, il y a continuellement des echanges de requette et le timeout permet de sortir de ce cercle infernal ou bout de x secondes d'inactivités. Très utile si jamais vous perdez une connexion, cela evite a votre programme d'attendre indéfiniment une réponse du serveur sans pouvoir s'arrèter.

    Dans certains cas comme dans les sockets par exemples, nous pouvons gèrer ce timeout en lui disant nous meme tous les combiens de temps il faut aller vérifier cette connexion... Grace à la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    socket.settimeout(value)
    Setting a timeout of None disables timeouts on socket operations. s.settimeout(0.0) is equivalent to s.setblocking(0); s.settimeout(None) is equivalent to s.setblocking(1).
    Dans votre cas, je ne sais pas si le problème vient de la ou non. En effet, certains hébergeurs comme "free" force une déconnexion au bout de 45 secondes d'inactivité, et dans ce cas, par défaut dans votre programme ce dernier vous renverait ce message vous disant que la connexion à été perdue, mais grace à qui ? au timeout, car votre programme essaye de modifier des données avec le serveur, mais aucune réponse, alors il a arrèté d'attendre et a essayé de recommencer son action et c'est rendu compte qu'il n'y avait plus d'autoroute entre votre ordinateur et le serveur (c'est très simplifier et imagé ^^)

    Je ne conseille a personne de désactiver le timeout, sinon dans le cas ou le serveur couperai la connexion, d'autre bug surviendraient puisque vous tenteriez d'envoyer ou modifier des donnees auquel vous ne pouvez pas accèder...

    Dans votre cas ou le probleme viendrai du fait qu'il a perdu la connexion, vous pouvez, me semble-t-il, soulever une exception suite à cette perte de connexion et ainsi relancer la fonction qui vous permet de vous connecter pour reprendre son action.

    J'espere vous avoir aider, et je vous souhaite bon courage...

    Mickael

Discussions similaires

  1. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo