2012-09-05 2 views
0

J'essaye d'écrire une sorte de client API pour l'application basée sur PyQt4. Et, après this documentation je l'ai écrit ce code:QNetworkReply provoque segfault

from PyQt4 import QtCore, QtNetwork 


class API(QtCore.QObject): 
    def processResponse(self, response): 
     print 'response' 
     response.deleteLater() 

    def processError(self, error): 
     print 'error' 

    def authenticate(self, authUrl, login, password): 
     manager = QtNetwork.QNetworkAccessManager() 
     request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl)) 
     reply = manager.get(request) 
     reply.error.connect(self.processError) 
     reply.finished.connect(self.processResponse) 
     return reply 

    def authenticate2(self, authUrl, login, password): 
     manager = QtNetwork.QNetworkAccessManager() 
     request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl)) 
     self.reply = manager.get(request) 
     self.reply.error.connect(self.processError) 
     self.reply.finished.connect(self.processResponse) 
     return self.reply 


p = API() 
z = p.authenticate('http://dev.dentv.ru/edda/v1/token/', 'test', 'test') 
print z 
print z.isFinished() 

Le premier problème est - aucun des signaux (processResponse, processError) est appelé (même si je déclare la connexion avec self.connect(.., SIGNAL(..), ..)). Le deuxième problème est que ce code provoque une erreur de segmentation sur la dernière ligne, lorsque j'appelle la méthode isFinished. Si j'appelle cette méthode dans la méthode API, cela fonctionne correctement.

Je pensais que la cause est que reply objet ou obtenir en quelque sorte supprimé les déchets collectés, donc je l'ai écrit la deuxième version de authenticate méthode avec explicite reply lier à la variable objet. Cela provoque aussi la segfault.

Quel est le problème avec mon code?

Répondre

1

Je suis un idiot :(

Le problème a été résolu en liant la manager à la variable objet, pas reply. Le directeur était ramasse-miettes (ou lissée comme ça).

Questions connexes