python - 监视 nodemon js 或 npm 中的新文件创建事件
问题描述
是否可以使用 nodemon js 或 npm 或任何其他包仅监视新文件创建事件?例如:在一个项目中,每次创建一个新文件时,必须运行某些其他脚本来执行其他任务,仅用于一次设置。
目前,使用 nodemon 设置的方式每次文件更改时都会运行脚本,但这会浪费资源(CPU/内存),因为设置是一次性的,只有在创建新文件时才需要。
如果不是这里,希望这是一个简单的例子。
例如,每次创建新文件时,我们都希望运行一个脚本,该脚本会自动创建一些记录或指向该文件的链接——这只需要执行一次。
替代方案:如果在 nodemon 或 npm 包中不可能,是否有替代方案,例如直接使用 shell 脚本(windows + linux)或 python?
解决方案
Python是一种简单的方法!
使用看门狗
安装方式pip install watchdog
试试这个脚本并修改“on_created”函数来做你想做的事情。你可以使用 os.system("some script") 来调用另一个脚本,或者 subprocess.call(["node", "test.js"])。
import subprocess
import os
import sys
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class CustomHandler(FileSystemEventHandler):
"""Logs all the events captured."""
def on_moved(self, event):
super(CustomHandler, self).on_moved(event)
what = 'directory' if event.is_directory else 'file'
print("Moved {}: from {} to {}".format(what, event.src_path,
event.dest_path))
def on_created(self, event):
super(CustomHandler, self).on_created(event)
what = 'directory' if event.is_directory else 'file'
print("Created {}: {}".format(what, event.src_path))
def on_deleted(self, event):
super(CustomHandler, self).on_deleted(event)
what = 'directory' if event.is_directory else 'file'
print("Deleted {}: {}".format(what, event.src_path))
def on_modified(self, event):
super(CustomHandler, self).on_modified(event)
what = 'directory' if event.is_directory else 'file'
print("Modified {}: {}".format(what, event.src_path))
if __name__ == "__main__":
path = sys.argv[1] if len(sys.argv) > 1 else '.'
event_handler = CustomHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=False)
observer.start()
print("Watchdog started...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
希望这可以帮助 :)
推荐阅读
- python - 识别rowspan和colspan:使用漂亮汤的html表格
- angular - 使用 Angular 和 Thymeleaf 前端技术的 Spring Boot
- android - 从 3.6 更新到 Android Studio 4.0 后构建具有 NDK 支持的项目时出错
- python - 如何在 selenium python 中获取 h2 标签内的文本
- excel - range 中的每一行都会跳过第二个值
- kubernetes - 缩小 Kubernetes 中的视频会议软件
- three.js - 我无法在 JSFiddle 中输入 dat.gui
- java - 我需要以编程方式将我的 APP 中的借记卡添加到 Google 支付
- c++ - 嵌套模板函数的重载
- postgresql - 如何在postgres中每N行打印列标题?