你可以使用Qt的QNetworkAccessManager类下载172.16.1.36上的某个压缩包。以下是一个简单的示例代码:
import os
from PyQt5 import QtCore, QtNetwork
file_url = "http://172.16.1.36/my_archive.zip"
output_dir = "/path/to/output/directory"
# Create the output directory if it doesn't exist
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# Create a QUrl object from the file URL
url = QtCore.QUrl(file_url)
# Create a QNetworkRequest object and set its URL
request = QtNetwork.QNetworkRequest(url)
# Create a QEventLoop to block until the download is complete
loop = QtCore.QEventLoop()
# Create a QNetworkAccessManager to handle the download
manager = QtNetwork.QNetworkAccessManager()
def on_finished(reply):
# Get the HTTP status code of the response
status_code = reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute)
if reply.error() == QtNetwork.QNetworkReply.NoError:
# Get the downloaded data as a QByteArray
data = reply.readAll()
# Extract the filename from the URL (e.g., "my_archive.zip")
filename = os.path.basename(url.path())
# Write the downloaded data to disk in binary mode
with open(os.path.join(output_dir, filename), "wb") as f:
f.write(data)
print(f"Downloaded {filename} successfully.")
else:
print(f"Error downloading {url.toString()}: {reply.errorString()} ({status_code})")
loop.quit()
# Connect the finished signal of the manager's get method to our slot function for handling downloads.
manager.finished.connect(on_finished)
# Send an HTTP GET request to download the file
reply = manager.get(request)
# Enter the event loop and block until the download is complete
loop.exec_()
在上面的代码中,我们首先定义了要下载的文件的URL和输出目录。然后我们使用QUrl对象将文件URL转换为Qt可识别的格式,并创建一个QNetworkRequest对象来设置请求URL。接下来,我们创建一个QEventLoop对象,该循环用于阻塞直到下载完成。然后,我们创建一个QNetworkAccessManager对象来处理下载过程,并使用get方法向服务器发送HTTP GET请求以获取文件数据。
最后,我们连接manager的finished信号到on_finished槽函数。在此函数中,我们检查响应状态码是否为200(即成功),如果成功,则将下载数据写入磁盘并打印出“Downloaded successfully.”信息;否则,在控制台打印出错误消息和状态码。
请注意,在使用此示例代码时,请确保将file_url
和output_dir
变量设置为正确的值,并且网络连接是正常工作的。