从watchman捕获文件/路径信息的最佳方法是什么? '制作'或另一个应用程序?
这就是我想要实现的目标:
当我在开发服务器上保存.py(s)文件时,我想检索文件名和路径,将py编译为pyc,然后将pyc文件传输到登台服务器。
我应该使用watchman-make,'heredoc'方法,ansible等? 因为文档非常有用,有没有可用的例子?
并且,pywatchman的用例是什么?
提前致谢
答案 0 :(得分:3)
希望这有助于澄清一些事情:
Watchman作为每用户服务运行,以监控您的文件系统。它可以:
pywatchman是一个python客户端实现,允许您构建使用watchman信息的应用程序。 watchman-make
和watchman-wait
工具是使用pywatchman实现的。
watchman-make
是一个可以帮助您在文件更改时调用make
(或类似程序)的工具。在您要运行的程序不需要刚刚更改的特定文件列表的情况下,它是最合适的。 make
属于此类别; make
将分析Makefile
中的依赖关系,然后仅构建已更改的部分。您也可以执行python distutils或setuptools setup.py
脚本。
本地守望者触发器比watchman-make
更难使用,因为它们是由守望者服务在后台生成的,并且传递了已更改文件的列表。这些最适合完全无人值守的过程,您不需要查看输出并需要精确的已更改文件列表。
从您所描述的内容来看,听起来最简单的解决方案是执行编译步骤然后执行同步的脚本,类似于以下内容;我们称之为build-and-sync.sh
#!/bin/sh
python -m compileall .
rsync -avz . host:/path/
(如果您真的不需要.pyc
文件而只需要同步,那么您只需从上面的脚本中移除python
行,然后让它运行{{1 }})
然后,当事情发生变化时,您可以使用rsync
执行此操作:
watchman-make
然后,在更改任何watchman-make --make='build-and-sync.sh' -p '**/*.py' -t dummy
文件(或一组.py
个文件)后,.py
将执行watchman-make
。这应该足够了,除非你有足够多的python文件,每次进行更改时编译步骤都需要太长时间。 build-and-sync.sh dummy
将继续运行,直到您按CTRL-C或以其他方式终止进程;它会在终端窗口的前台运行,除非您使用watchman-make
,nohup
或tmux
之类的内容来保持更长时间。
如果是这种情况,那么您可以尝试使用带有模式规则的screen
来仅编译已更改的python文件,或者如果使用make表示难以表达,则可能值得使用{{1}建立订阅并编译已更改的文件。这是一个更高级的用例,我建议查看watchman-wait的代码,看看如何实现。https://facebook.github.io/watchman/docs/cmd/trigger.html#extended-syntax除非您有大量文件或非常严格的时间限制,否则可能不值得为此付出额外的努力。
我建议您首先尝试最简单的解决方案,看看是否符合您的需求,然后再尝试其中一个更复杂的选项。
作为替代方案,您可以使用触发器。它们在后台运行,输出到watchman日志文件。与使用make
相比,它们更难处理。
您需要编写一个小程序,通常是一个脚本,以从触发器接收已更改文件的列表;最好的方法是通过脚本的stdin。您可以接收每行一个文件列表或具有更多结构化信息的JSON对象。让我们调用这个脚本pywatchman
;由您来实现脚本的内容。让我们假设您只需要stdin上的文件列表。
此命令将设置触发器;你调用它一次,它将一直持续到手表被移除为止:
watchman-make
可以在https://codereview.stackexchange.com/questions/86016/left-shifting-an-array-of-ints
找到完整的文档