python - 如何使用看门狗知道文件何时下载?
问题描述
我有一个使用给定链接下载文件的功能。如果文件下载时间过长,脚本会报错。然后我添加了time.sleep(30)
但是等待可以在 1 秒内下载的小文件的时间太多了。像这样:
for link in links:
download_function(link)
time.sleep(30) ### I added this sleep but is to much to wait for small files.
rest of the code
.
.
然后我想添加一个看门狗进程以了解文件实际下载的时间,然后继续执行其余代码。
我测试了以下代码本身可以正常工作,检查目录何时被修改并报告文件何时下载。
import sys
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
## Watcher code
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
watchDirectory = '/Path/To/Directory/'
event_handler = LoggingEventHandler()
observer = Observer()
observer.schedule(event_handler, watchDirectory, recursive=True)
observer.start()
try:
while observer.isAlive():
observer.join(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
<ObservedWatch: path=/Path/To/Directory/, is_recursive=True>
2020-06-01 14:42:05 - Created file: /Path/To/Directory/somefile.pdf
2020-06-01 14:42:06 - Modified directory: /Path/To/Directory/
但我不知道使用看门狗代码(而不是 time.sleep(30))作为函数,以便等到文件下载后才能继续使用其余代码。
像这样的东西:
def download_complete(DirToWatch):
Watcher code here
.
.
download_complete = false
If download_complete==true:
stop watcher
return true
for link in links:
download_function(link)
if download_complete(DirToWatch) == true:
continue with rest of the code
rest of the code
.
.
我怎样才能做到这一点?提前致谢。
解决方案
您可以使用它来监视当前文件夹中何时下载了文件:
from sys import argv
from time import sleep
from logging import basicConfig, INFO
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
if __name__ == "__main__":
basicConfig(level=INFO)
path = argv[1] if len(argv) > 1 else '.'
event_handler = LoggingEventHandler()
obs = Observer()
obs.schedule(event_handler, path, recursive=True)
obs.start()
obs.join()
推荐阅读
- javascript - 基于条件的jquery
- riscv - 想澄清我对R型指令的理解
- php - Youtube API - 上传视频
- javascript - 覆盖不会在点击时触发
- apache-kafka - 每次启动时强制自动缩放的消费者阅读整个 Kafka 主题
- android - CustomView 中的 DialogFragment 导致内存泄漏
- java - 如何为使用 ActiveMQ Artemis 的服务编写集成测试
- powerbi - PowerBi 与 ConnectionString
- c# - Windows Server 2019 上 IIS 上的 ASP.NET 应用程序更新
- node.js - 如何在 Node.js 快速路由上显示从外部 URL 获取的图像