从文件系统事件触发自定义命令。
项目描述
PatrolTrigger
从文件系统事件触发自定义命令。
Patrol使用libuv,它使用epoll、kqueue或IOCP创建文件系统事件的驱动型钩子。
您可以使用它来在文件更改时选择性地构建项目,并在点击保存按钮后立即运行测试。
使用
安装
sudo pip install patroltrigger
在项目根目录创建一个名为patrol.py的文件
#!/usr/bin/python
from patroltrigger import runnable, run, trigger
@trigger(["*.py", ], exclude=['venv/*',])
def trigger1(filenames):
print "trigger1"
run("""echo first command triggered""")
the_output_is_in_this_variable_though = run("echo this command is run, but the output is not displayed", silent=True)
@trigger(["*.py", ], exclude=['venv/*',])
def trigger2(filenames):
print "trigger2 command triggered with filename: {}".format(', '.join(filenames))
run("false", ignore_errors=True) # If ignore_errors=False, nothing further will be executed.
run("""echo if ignore_errors is False or not specified, you wont ever see this command *or* the results of trigger3.""")
@trigger(["*.py", ], exclude=['venv/*',])
def trigger3(filenames):
print "trigger3 command triggered with filename: {}".format(', '.join(filenames))
runnable(__name__)
运行方式如下
$ python patrol.py
或获取帮助
$ python patrol.py --help Usage: patrol.py [options] Options: -h, --help show this help message and exit -r RUN, --run=RUN Specify a method in patrol.py to run directly. -a, --all Run all methods in patrol.py in priority order. -p POST, --post=POST Command to run after a trigger (e.g. guake) -d DIRECTORY, --directory=DIRECTORY Directory to run patrol.py in (default: /home/user/yourproject).
功能
如果多个方法由更改的文件触发,它们将按照在patrol.py中出现的顺序运行。
通过在运行patrol.py的目录中放置一个名为'lock'的文件来排队触发器。一旦'lock'被移除,积压的触发器将全部触发。
每次触发一组方法时,将记录总运行时间。
如果命令失败(例如单元测试),默认情况下在该点中止方法以缩短反馈时间。后续的方法将不会运行。
在每个方法完成后运行自定义命令(例如guake,notify-send)。
可以手动运行命令。