首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在事件后触发python代码

如何在事件后触发python代码
EN

Stack Overflow用户
提问于 2019-05-28 23:02:20
回答 1查看 1.7K关注 0票数 0

我想在另一个软件之后开始一些python代码。

这个软件做一些数据提取,并定期给我一些CVS文件形式的结果(每周)。我想要做的是触发我的Python代码在这些文件上执行,以便对它们执行一些函数,我希望在每次提取后都能完成。

我尝试了while(1),但似乎效率不高。

有没有什么Python代码或者执行Python的软件可以用来解决这个问题呢?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-28 23:13:06

您可以监视文件夹,然后处理文件创建和/或修改事件。如果需要,您的脚本可以监视网络上的远程驱动器。

以下代码是从工作代码中截取出来的,但我不能确定它是否在这种代码片段状态下工作。它将为新创建的文件调用HandleNewlyCreated()

代码语言:javascript
复制
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class WatchPendingHandler(FileSystemEventHandler):
    ''' Run a handler for every file added to the pending dir

    This class also handles what I call a bug in the watchdog module
    which means that you can get more than one call per real event
    in the watched dir tree.
    '''

    def __init__(self):
        super(WatchPendingHandler, self).__init__()
        # wip is used to avoid bug in watchdog which means multiple calls
        # for one real event.
        # For reference: https://github.com/gorakhargosh/watchdog/issues/346
        self.wip = []

    def on_created(self, event):
        path = event.src_path
        if event.is_directory:
            logging.debug('WatchPendingHandler() New dir created in pending dir: {}'.format(path))
            return
        if path in self.wip:
            logging.debug('WatchPendingHandler() Dup created event for %s', path)
            return
        self.wip.append(path)
        logging.debug('WatchPendingHandler() New file created in pending dir: {}'.format(path))
        HandleNewlyCreated(path)

    def on_moved(self, event):
        logging.debug('WatchPendingHandler() %s has been moved', event.src_path)
        with contextlib.suppress(ValueError):
            self.wip.remove(event.src_path)

    def on_deleted(self, event):
        path = event.src_path
        logging.debug('WatchPendingHandler() %s has been deleted', path)
        with contextlib.suppress(ValueError):
            self.wip.remove(path)

observer = Observer()
observer.schedule(WatchPendingHandler(), DIR_PENDING, recursive=True)
observer.start()
logging.info('Watching %s', DIR_PENDING)
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
observer.join()

on_created()的解释:它会检查事件是否是为了创建目录。如果是,它会记录该事件,然后返回/忽略该事件。然后,它检查文件创建事件是否以前发生过(self.wip中的路径)。如果是这样,它也会忽略该事件并返回。现在它可以在self.wip中记录事件,记录新事件,然后调用HandleNewlyCreated()来处理新创建的文件。

如果文件被移动或删除,那么我们需要从self.wip中删除路径,以便新文件的下一个创建事件不会被忽略。

更多信息请点击此处:https://pypi.org/project/watchdog/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56345090

复制
相关文章

相似问题

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