gpt4 book ai didi

python - 用 Watchman 编译 python 文件

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:22 26 4
gpt4 key购买 nike

从守望者那里捕获文件/路径信息的最佳方法是什么
“制作”或其他应用程序?

这是我想要实现的目标:

当我在开发服务器上保存 .py(s) 文件时,我想检索文件名和路径,将 py 编译为 pyc,然后将 pyc 文件传输到登台服务器。

我应该使用 watchman-make、'heredoc' 方法、ansible 等吗?
因为文档注释非常有用,是否有任何示例可用?

而且,pywatchman 的用例是什么?

提前致谢

最佳答案

希望这将有助于澄清一些事情:

Watchman 作为每用户服务运行以监视您的文件系统。它可以:

  • 提供对发生文件更改的实时订阅
  • 当文件发生更改时触发在后台运行的命令
  • 回答有关自给定时间点以来文件如何更改的查询

  • pywatchman 是一个 python 客户端实现,允许您构建使用 watchman 信息的应用程序。 watchman-makewatchman-wait工具是使用 pywatchman 实现的。
    watchman-make是一个帮助您调用的工具 make (或类似程序)文件更改时。在您要运行的程序不需要刚刚更改的特定文件列表的情况下,这是最合适的。 make属于这一类; make将分析您的 Makefile 中的依赖项然后只构建改变的部分。您也可以执行 python distutils 或 setuptools setup.py脚本。

    本地守望者触发器比 watchman-make 更难使用,因为它们是由 watchman 服务在后台生成的,并且会传递已更改文件的列表。这些最适合完全无人值守的进程,您不需要查看输出并需要更改文件的精确列表。

    根据您所描述的,听起来最简单的解决方案是执行编译步骤然后执行同步的脚本,类似于以下内容;让我们称之为 build-and-sync.sh
    #!/bin/sh
    python -m compileall .
    rsync -avz . host:/path/

    (如果你真的不需要 .pyc 文件而只需要同步,那么你可以简单地从上面的脚本中删除 python 行,让它运行 rsync )

    然后您可以使用 watchman-make在情况发生变化时执行此操作:
    watchman-make --make='build-and-sync.sh' -p '**/*.py' -t dummy

    然后,在任何 .py 之后文件(或一组 .py 文件)被更改, watchman-make将执行 build-and-sync.sh dummy .这应该足够了,除非您有足够多的 python 文件,以至于每次进行更改时编译步骤都需要很长时间。 watchman-make将继续运行,直到您按 CTRL-C 或以其他方式终止进程;除非你使用类似 nohup 的东西,否则它会在你的终端窗口的前台运行。 , tmuxscreen让它保持更长时间。

    如果是这种情况,那么您可以尝试使用 make使用模式规则仅编译更改的 python 文件,或者如果使用 make 表达很尴尬,那么也许值得使用 pywatchman建立订阅并编译更改的文件。这是一个更高级的用例,我建议查看 watchman-wait 的代码看看如何实现这一目标。除非您有大量文件或非常紧迫的同步时间限制,否则可能不值得为此付出额外的努力。

    我建议先尝试最简单的解决方案,看看它是否满足您的需求,然后再尝试更复杂的选项之一。

    使用 native 触发器

    作为替代方案,您可以使用触发器。它们在后台运行,它们的输出会进入 watchman 日志文件。它们比使用 watchman-make 更难使用.

    您需要编写一个小程序,通常是一个脚本,从触发器接收已更改文件的列表;最好的方法是通过脚本的标准输入。您可以接收每行一个文件列表或具有更多结构化信息的 JSON 对象。让我们调用这个脚本 trigger-build-and-sync ;由您来实现脚本的内容。假设您只需要 stdin 上的文件列表。

    此命令将设置触发器;你调用它一次,它会一直存在,直到 watch 被移除:
    watchman -j <<-EOT
    ["trigger", "/path/to/root", {
    "name": "build-and-sync",
    "expression": ["suffix", "py"],
    "command": "/path/to/trigger-build-and-sync",
    "append_files": false,
    "stdin": "NAME_PER_LINE"
    }]
    EOT

    完整的文档可以在 https://facebook.github.io/watchman/docs/cmd/trigger.html#extended-syntax 上找到。

    关于python - 用 Watchman 编译 python 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977048/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com