gpt4 book ai didi

python - 如何在 pyinfra 中包含自定义模块?

转载 作者:行者123 更新时间:2023-12-04 08:49:09 27 4
gpt4 key购买 nike

我正在使用 pyinfra 提供一些文件。我想知道放置自定义模块的最佳位置。
示例
给定一个返回 True 的自定义事实如果系统不是 headless 系统:

class HasGui(FactBase):
default = list
command = 'ls /usr/share/xsessions/*.desktop || true'

def process(self, output):
return output
问题
我把这个放在哪里?我想我可以将这段代码直接编码到一个“操作”文件中,但是如果我想在几个模块中重用这段代码怎么办?如何将其抽象为单独的模块或从 API 访问它?
data can be shared across modules ,推荐 layout似乎不容易允许自定义模块挂接到 API。
接近
  • 我尝试制作一个单独的任务级模块,但在命令行调用时无法识别。
  • 最后的手段可能是添加到 sys.path 的路径。 ,但我更喜欢更清洁的选择。
  • 最佳答案

    这个bug建议可以从顶级 config.py 中检测到自定义事实文件位于 next to "deploy" files .
    代码
    编码到配置中的自定义事实(可选)。另见样本 layout :

    # config.py

    from pyinfra.api import FactBase


    class HasGui(FactBase):
    default = list
    command = 'ls /usr/share/xsessions/*.desktop || true'

    def process(self, output):
    return output
    注意:尾随 || true防止 pyinfra 在失败时出错。尽管继续,但故障似乎是在内部处理的。
    当自定义事实子类 FactBase , 它被添加到 facts index .您可以通过 snake-cased attributes 访问它们:
    # tasks/operation.py

    from pyinfra import host


    if host.fact.has_gui:
    # Insert operation
    ...

    演示
    在命令行中运行。
    > pyinfra @local tasks/operation.py
    [@local] Successful: 1 Errors: 0 Commands: 1/1

    > pyinfra @<server> tasks/operation.py
    [@local] Successful: 0 Errors: 0 Commands: 1/1

    关于python - 如何在 pyinfra 中包含自定义模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64165507/

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