试图为文件上传实现一个进度对话框窗口,看起来像是IE 下载对话框和Firefox 下载对话框之间的交叉,在 Windows 上使用 python GUI 库。
- python有哪些异步(S)FTP库?理想情况下,我应该能够恢复文件上传并跟踪每个并行文件上传的进度。
- 如果我在单独的进程中运行每个文件上传,如何获取上传状态并将其显示在进度条对话框中?
试图为文件上传实现一个进度对话框窗口,看起来像是IE 下载对话框和Firefox 下载对话框之间的交叉,在 Windows 上使用 python GUI 库。
“ftplib”是 Python 内置的标准 ftp 库。在 Python 2.6 中,它在用于上传的方法中添加了一个回调参数。
该回调是您提供给库的函数;每个完成的块都会调用一次。
您的函数可以向 GUI 发送消息(可能在不同的线程/进程上,使用标准的线程间或进程间通信)告诉它更新其进度条。
如果您想要一个完整的示例,了解如何使用线程和事件来使用 WxPython 使用长时间运行的任务更新您的 GUI,请查看此页面。本教程非常有用,并帮助我执行了与您的程序类似的程序。
如果您的数据传输在与 GUI 不同的线程中运行,您可以在必须从数据传输线程更新进度条时使用 wx.CallAfter()。
首先,必须使用 CallAfter(),因为不能从子线程调用 wxPython 函数。
其次,这将使数据传输的执行与主线程中的 GUI 分离。
请注意,CallAfter() 仅适用于线程,不适用于单独的进程。在这种情况下,使用 multiprocessing 包应该会有所帮助。
如果你不能使用 Python 2.6 的 ftplib,有一家公司提供商业解决方案。
Chilkat的CKFTP2花费数百美元,但承诺与 Python 2.5 一起使用,并提供一个函数调用 get_AsyncBytesSent() 来返回您需要的信息。(我没有看到回调,但它也可能提供回调。)
我没用过这个产品。
还要考虑如果 FTP 被证明太难/太贵,你总是可以切换到 HTTP 上传。Chilkat 有一个免费的 HTTP/HTTPS 上传库。