当目录或文件发生变化时调用命令。(仅限Mac OS)
项目描述
icemac.callonchange在目录或其中某物发生变化时调用特定命令。它被开发出来以简化测试驱动开发(TDD):每次测试用例或开发中的代码发生变化时,都可以调用正在开发的测试用例。
变更日志
0.8 (2018-08-03)
将测试固定为与 zc.buildout >=1.7 一起运行。
取消了对Python < 2.7的支持。
将许可协议从ZPL更改为MIT。
0.7.0 (2011-01-18)
添加了在调用callonchange后立即运行实用程序的新选项。此选项也添加到了使用配方时的默认选项中。
0.6.1 (2010-12-11)
使测试更加健壮。
将更多类似工具添加到列表中。
0.6 (2010-07-28)
增加了对Python 2.4的兼容性。
现在正式支持Python 2.6和2.7。
较旧的变化
请查看包内的OLD_CHANGES.rst文件。
需求
Mac OS X 10.5+ (Leopard)
Python 2.7
通用用法
用法:callonchange [选项] 路径 实用程序 [实用程序参数]
当路径或其内容发生变化时,callonchange将调用实用程序及其实用程序参数。
- 选项
- --version
显示程序版本号并退出
- -h,--help
显示此帮助信息并退出
- -e EXTENSION
仅在文件扩展名为此扩展名时调用实用程序(此选项可多次使用)
- -i
在callonchange启动后立即运行实用程序。(默认情况下,只有在发生变化时才会运行实用程序。)
- -q
不显示callonchange的任何输出。(仍会显示实用程序的输出。)
EXTENSION可以带或不带前导点指定
-e .py 等于 -e py 等于 -epy
注意:可选参数必须在位置参数(路径和实用程序)之前指定。在位置参数之后指定的参数被视为实用程序的参数。
作为脚本使用
安装
要将callonchange作为脚本安装,请调用
$ python setup.py install
或者使用像easy_install或pip这样的包管理器安装。
作为脚本调用
要将它作为脚本调用,请添加要观察的目录路径以及当目录或其内容发生变化时要调用的命令(脚本或程序)。
示例:当/var/log中的文件扩展名为log发生变化时调用xeyes,输入
$ callonchange -e log /var/log xeyes
注意:在此示例中,xeyes将在日志文件中的每个新条目上调用。
在buildout中
包中有一个用于简化buildout安装的配方。
使用默认参数安装
向你的buildout添加一个部分以生成callonchange脚本(别忘了将其添加到部分中!)
[coc] recipe = icemac.callonchange
这会创建一个带有默认参数的callonchange脚本。这些参数是
'-i', '-e', 'py', '-e', 'zcml', '-e', 'pt', '-e', 'txt', 'src', 'bin/test', '-cv'
这意味着:在src目录中观察扩展名为py、zcml、pt和txt的文件。当callonchange被调用以及后来发生变化时,使用参数cv(详细信息和彩色)调用bin/test。
使用自定义参数安装
要覆盖默认参数,向buildout部分添加一个arguments参数
[coc] recipe = icemac.callonchange name = coc arguments = 'Products', 'bin/ztest'
这意味着:创建的脚本将命名为coc。当调用时,它将观察Products目录并在发生变化时调用bin/ztest。
作为buildout脚本使用
在调用生成的脚本时,您可以添加额外的参数
$ bin/callonchange -t testObserver
当在buildout部分使用默认参数时,此命令行在src目录中的py、zcml、pt或txt文件发生变化时,在每个变化上调用bin/test -cv -t testObserver。
停止callonchange
要停止正在运行的callonchange实例,请按^C(控制-C)。
感谢
感谢Malte Borch为icemac.callonchange提供优秀的MacFSEvents。
类似工具
(按我了解它们的顺序排序。)
pest:“Python的自动测试器”似乎被设计为只运行测试。有growl集成。当前版本(1.0.3)没有自动测试。
sniffer:“一个自动测试运行器。支持nose。”支持Linux、Windows和Mac OS X。当前版本(0.2.2)没有自动测试。
autonose:“nosetests的持续测试跟踪/运行器”似乎专注于nose测试。版本0.2只对Python文件的变化作出反应。
PyZen:“为偏执的开发者提供的持续测试。”似乎与Python的
unittest 框架和Django紧密集成。通过比较文件修改时间戳来检测文件更改。因此,在大型代码库上运行较慢。版本0.1没有自动测试。Flask-Zen:“用于与PyZen集成的Flask-Script命令。”围绕PyZen的轻量级层,以集成到Flask中。版本0.1没有自动测试。
nosier:“监控路径,并在检测到更改时运行指定的命令”。然而,由于它依赖于inotify功能,因此仅限于Linux 2.6。使用黑名单和白名单跟踪更改的文件,并具有一些其他优秀功能。版本1.1没有自动测试。
supcut:“简单的Python持续单元测试”。由于依赖于inotify,因此仅限于Linux。期望一些模板文件安装在
/usr/share/doc/python-supcut/examples 。尽管它总是谈论运行nose测试,但也可能用于任意调用。可以发送测试运行电子邮件。版本0.5.1没有自动测试。rerun:“当当前目录或其子目录中的文件更改时,重新运行给定命令的命令行Python脚本。”运行与操作系统无关,但轮询文件更改时间。版本1.0.16没有自动测试。
想法
即使在未使用buildout的情况下,也希望有预定义的参数行(配置文件)。它们可以存储在用户的家目录中。(应支持引用其他配置文件的配置文件。)
在buildout配方中:默认脚本名称应该是部分名称。
在调用之间可能有一个最小时间间隔(延迟),这样在延迟时间内发生更改时就不会导致调用实用程序。
callonchange的选项也应该有长变体。
nosier的黑白名单方法看起来很棒。
在监视具有特定扩展名的文件更改的大树时,启动脚本可能需要一些时间,因为整个树必须扫描一次。在此启动期间,尚未处理更改,因此启动完成后会发出消息。
http://pypi.python.org/pypi/watchdog可以在Linux和Windows上运行callonchange。
黑客
源代码
获取源代码
$ hg clone https://bitbucket.org/icemac/icemac.callonchange
运行测试
(目前,在Mac OS X得到支持之前,在Travis-CI上无法成功运行。)
要运行icemac.callonchange的测试,请调用
$ python setup.py test
或使用
$ python bootstrap.py $ bin/buildout $ bin/test
或使用
$ python bootstrap.py $ bin/buildout $ bin/callonchange
在上一个版本中,您必须更改包的