You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Pyinfra配置脚本传入自定义参数以生成客户端资源?

问题

我们在运行Pyinfra自动化任务前需要生成客户端产物,流程是先生成构建文件,再用Pyinfra推送到远程服务器。为此用了两类脚本:

  • 配置脚本(prepare.py):仅在本地执行一次,官方说明适合用来生成客户端产物
  • 自动化脚本:针对清单里的每个主机执行的通用Pyinfra脚本

我们希望通过命令行传入参数来生成指定版本的构建产物,执行命令如下:

pyinfra --data build-version=v1.0 --config prepare.py inventory.py deploy.py

但找不到在prepare.py里访问build-version参数的示例,尝试从pyinfra导入host对象,但该对象没有data字段(应该是清单还没初始化)。想知道能不能在prepare.py里访问这个参数?

回答

可以在prepare.py里直接访问命令行传入的--data参数,不需要依赖host对象。Pyinfra会把这些参数注入到全局的data对象里,你直接在prepare.py中导入并使用即可:

# prepare.py
from pyinfra import data

# 直接获取build-version参数
build_version = data.get('build-version')
print(f"当前构建版本:{build_version}")

# 这里写生成对应版本构建产物的逻辑

原理是:--config指定的脚本会在Pyinfra处理清单和主机之前执行,此时全局的data对象已经加载了命令行传入的所有--data参数,不需要等待主机初始化。

另外要注意参数名的写法:命令行里用build-version,在data对象里要保持一致(不要改成下划线的build_version,Pyinfra会原样保留参数名)。

内容的提问来源于stack exchange,提问作者mdraevich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:19:58