用python watchdog监视目录可行性如何
有人用过 python watchdog来监视目录么?
因为工作需要,需要写个程序监视一个目录,当有文件创建时,将该文件上传到远程FTP服务器。
使用watchdog可以实现监视的功能,但如果我在受监控的目录里放入的是一个较大的文件,就会报
IOError: [Errno 13] Permission denied: u'F:\xiongji.mp4'的错误。
因为它获取的是文件的创建、修改、删除等事件。
如何获取【当一个文件创建完成】的事件呢?
代码执行环境是:windows 7, python 2.7
import sys
import time
import os
import ftplib
from ConfigParser import SafeConfigParser
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyConfig():
def __init__(self):
self.loaded = False
self.scp = None
@staticmethod
def instance():
if not hasattr(MyConfig, "_instance"):
MyConfig._instance = MyConfig()
return MyConfig._instance
def load_config(self, filename):
self.scp = SafeConfigParser()
self.scp.read(filename)
self.loaded = True
return self
@property
def loaded(self):
return self.loaded
def get_segment(self, segment_name):
result = {}
keys = self.scp.options(segment_name)
for k in keys:
result[k] = self.scp.get(segment_name,k)
return result
class MyFTPClient():
def __init__(self):
self.loaded = False
self.ftp = None
@staticmethod
def instance():
if not hasattr(MyFTPClient, "_instance"):
MyFTPClient._instance = MyFTPClient()
return MyFTPClient._instance
@property
def loaded(self):
return self.loaded
def load_config(self, configfile):
if not MyConfig().instance().loaded:
MyConfig().instance().load_config(configfile)
host = MyConfig().instance().get_segment('FTP Config master')['ftp_host']
self.ftp = ftplib.FTP(host)
user = MyConfig().instance().get_segment('FTP Config master')['ftp_user']
passwd = MyConfig().instance().get_segment('FTP Config master')['ftp_passwd']
ftp_pwd = MyConfig().instance().get_segment('FTP Config master')['ftp_pwd']
self.ftp.login(user, passwd)
self.ftp.cwd(ftp_pwd)
def upload_file(self, file_abs_path):
command = 'STOR ' + os.path.basename(file_abs_path)
os.chdir(os.path.dirname(file_abs_path))
print "FTP command: [%s]" % command
try:
ret = self.ftp.storbinary(command, open(file_abs_path, "rb"))
except ftplib.error_perm, e:
print e.message
#except:
# print "unknown error."
# pass
print "upload [%s] O.K." % file_abs_path
class MyFileMonitor(FileSystemEventHandler):
def on_created(self, event):
super(MyFileMonitor, self).on_created(event)
if not event.is_directory:
print "created name:[%s]" % event.src_path
def on_modified(self, event):
super(MyFileMonitor, self).on_created(event)
if not event.is_directory:
print "modified name:[%s]" % event.src_path
abs_path = event.src_path
MyFTPClient().instance().upload_file(abs_path)
def monitor(path):
event_handler = MyFileMonitor()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == '__main__':
MyConfig.instance().load_config('config.ini')
MyFTPClient.instance().load_config('config.ini')
monitor(MyConfig.instance().get_segment('User PC config')['picture_dir'])
猜测:当创建时,较大的文件没有完全拷贝完,这时候你访问就会抛出异常,那你sleep一下,继续尝试打开,直到访问这个文件时不抛出异常了,那就说明这个文件创建完了。
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19642.html
相关文章 Recommend
- • 2019年3月最新消息: Python 3.4.10 现已推出
- • [上海]招Python量化系统开发工程师
- • 支付宝官方给力福利!每天可领1个红包,直接当
- • 优集品网络科技有限公司招Python中/高级工程师
- • 爱因互动科技发展有限公司招募Python开发攻城狮
- • mozio招聘Python/Django工程师
- • Kavout金融科技公司招Python研发工程师
- • Python数组逆向输出,编程练习题实例四十
- • Python数组插入排序,编程练习题实例三十九
- • Python矩阵for循环应用,编程练习题实例三十八
- • Python操作Redis数据库方面的问题
- • 请python高手帮我看看这段python代码中函数setter的
您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:
必知PYTHON教程 Must Know PYTHON Tutorials
- • python 解释器
- • python idle
- • python dir函数
- • python 数据类型
- • python type函数
- • python 字符串
- • python 整型数字
- • python 列表
- • python 元组
- • python 字典
- • python 集合
- • python 变量
- • python print
- • python 函数
- • python 类定义
- • python import
- • python help
- • python open
- • python 异常处理
- • python 注释
- • python continue
- • python pass
- • python return
- • python global
- • python assert
- • python if语句
- • python break
- • python for循环
- • python while循环
- • python else/elif
- • lambda匿名函数
必知PYTHON模块 Must Know PYTHON Modules
- • os 模块
- • sys 模块
- • re 正则表达式
- • time 日期时间
- • pickle 持久化
- • random 随机
- • csv 模块
- • logging 日志
- • socket网络通信
- • json模块
- • urlparse 解析URL
- • urllib 模块
- • urllib2 模块
- • robotparser 解析
- • Cookie 模块
- • smtplib 邮件
- • Base64 编码
- • xmlrpclib客户端
- • string 文本
- • Queue 线程安全
- • math数学计算
- • linecache缓存
- • threading多线程
- • sqlite3数据库
- • gzip压缩解压
最新内容 NEWS
- • Python程序员解决棘手问题的常用库
- • 求助关于restfull api接口几个问题
- • qiniu pythonsdk提示ImportError错误求解
- • 问一个关于Hadoop Python中读写文件统计分析
- • 求问str()同__str__原理上有什么不同,分别在
- • 大神帮忙看下20行的python代码,文件io和数
- • python 爬虫爬wiki 报错 [Errno 65] No route to
- • python续点上传问题None bad token...
- • python3环境下文本中超链接出错,要如何修
- • Python环境保存操作思路问题求助
图文精华 RECOMMEND
-
Python程序员解决棘手问题的常用库
-
求问str()同__str__原理上有什么不同
-
scrapy框架里面用link extractor怎么能
-
python {}.fromkeys创建字典append添加操
-
python3 类型Type str doesn't support th
-
python里面为什么系统的时区是东八
热点文章 HOT
- 学习Python有什么好的书籍推荐?
- Python匿名函数 Lambda表达式作用
- Python与Java、C、Ruby、PHP等编程语言有什么
- Python 正则中文网页字符串提取问题
- 如何为实时性应用存取经纬度?django my
- 想用python做个客户端,在二维码登录这个地
- 有让IDE可识别Python函数参数类型的方法吗
- Python字符串转换成列表正则疑问