首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QCoreApplication没有优雅地终止

QCoreApplication没有优雅地终止
EN

Stack Overflow用户
提问于 2018-10-03 12:18:25
回答 1查看 82关注 0票数 1

我是PyQt5新手。我编写了一个简单的CLI脚本,该脚本发出GET请求,打印结果,然后退出时出现错误:"QWaitCondition:在线程仍在等待时销毁“

我做错了什么?我的代码如下所示:

代码语言:javascript
复制
from PyQt5.QtCore import QCoreApplication, QObject, QUrl
from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager, QNetworkReply
import sys

class MainWindow(QObject):
    def __init__(self):
        super().__init__()

        target = "http://pyqt.sourceforge.net/Docs/PyQt5/index.html"
        request = QNetworkRequest(QUrl(target))

        self.networkAccessManager = QNetworkAccessManager()
        #self.networkAccessManager.finished[QNetworkReply].connect(self.headsUp)
        self.networkAccessManager.finished.connect(self.onFinished)
        self.networkAccessManager.get(request)

    def onFinished(self, response): #response is an object of type QNetworkReply
        error = response.error()

        if (error == QNetworkReply.NoError):
            result = response.readAll()
            print(response.header(QNetworkRequest.ContentTypeHeader))
            print(response.header(QNetworkRequest.LastModifiedHeader))
            print(response.header(QNetworkRequest.ContentLengthHeader))
        else:
            print("There was an error. "+response.errorString())

        self.windUp(response)        

    def windUp(self, replyObject): #replyObject is an object of type QNetworkReply
        print("Done")
        replyObject.deleteLater()
        QCoreApplication.quit()       


if __name__ == '__main__':

    qApp = QCoreApplication(sys.argv)
    w = MainWindow()
    sys.exit(qApp.exec_())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 13:09:01

当我运行您的代码时,我不会收到任何错误,只会得到一个空的答案。

代码语言:javascript
复制
text/html
None
0
Done

而且它是正确的,因为在那个url中没有任何内容,因为如果您使用一个浏览器,我们将看到它将我们重定向到另一个url:https://sourceforge.net/projects/pyqt/,因此为了启用重定向,将分析reply的RedirectionTargetAttribute属性。

代码语言:javascript
复制
import sys
from PyQt5 import QtCore, QtNetwork


class MainWindow(QtCore.QObject):
    def __init__(self):
        super().__init__()
        target = "http://pyqt.sourceforge.net"
        self.manager = QtNetwork.QNetworkAccessManager(self)
        self.manager.finished.connect(self.on_finished)
        self.start_request(target)

    def start_request(self, url):
        request = QtNetwork.QNetworkRequest(QtCore.QUrl(url))
        self.manager.get(request)

    @QtCore.pyqtSlot(QtNetwork.QNetworkReply)
    def on_finished(self, reply):
        redirection_target = reply.attribute(QtNetwork.QNetworkRequest.RedirectionTargetAttribute)
        if reply.error():
            print("There was an error. {}".format(response.errorString()))
        elif redirection_target is not None:
            reply.deleteLater()
            print("redirection_target: {}".format(redirection_target))
            self.start_request(redirection_target)
        else:
            print(reply.header(QtNetwork.QNetworkRequest.ContentTypeHeader))
            print(reply.header(QtNetwork.QNetworkRequest.LastModifiedHeader))
            print(reply.header(QtNetwork.QNetworkRequest.ContentLengthHeader))
            print(reply.readAll())
            reply.deleteLater()
            QtCore.QCoreApplication.quit()


if __name__ == '__main__':
    app = QtCore.QCoreApplication(sys.argv)
    w = MainWindow()
    sys.exit(app.exec_())

输出:

代码语言:javascript
复制
redirection_target: PyQt5.QtCore.QUrl('https://sourceforge.net/projects/pyqt/')
text/html; charset=utf-8
None
None
b'<!doctype html>\n<!-- Server: sfs-consume-8 -->\n<html class="no-js" lang="en">\n    <head>\n        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52626888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档