如何在GitHub Actions中传递repository_dispatch的client_payload至Python脚本
解决GitHub Actions中传递repository_dispatch的client_payload到Python脚本的问题
问题原因
直接通过${{ github.event.client_payload }}传递参数时,Shell会将JSON对象解析为字符串"Object",而非实际的JSON内容,导致Python脚本无法获取有效数据。
最优解决方案:序列化JSON字符串传递
利用GitHub Actions的toJSON()函数将client_payload序列化为标准JSON字符串,同时通过单引号包裹避免Shell拆分参数:
修改GitHub Actions工作流
在run命令中这样配置:run: python myscript.py -d '${{ toJSON(github.event.client_payload) }}'Python脚本解析参数
用json.loads()将传递的字符串还原为Python字典,示例代码:import argparse import json def main(): parser = argparse.ArgumentParser() parser.add_argument('-d', '--data', required=True, help='接收GitHub client_payload的JSON字符串') args = parser.parse_args() # 解析JSON字符串为Python字典 payload = json.loads(args.data) # 示例:处理payload中的数据 print("接收到的payload内容:", payload) # 获取特定字段示例 if 'target_field' in payload: print("目标字段值:", payload['target_field']) if __name__ == '__main__': main()
其他方法对比
- 传递单个属性:适合仅需少量字段的场景,比如
run: python myscript.py -n ${{ github.event.client_payload.name }},但字段较多时会导致命令冗长且维护麻烦。 - 写入JSON文件再读取:通过
echo '${{ toJSON(github.event.client_payload) }}' > payload.json生成文件,脚本读取文件解析。这种方法可行,但多了文件IO操作,效率不如直接传递序列化字符串。
内容的提问来源于stack exchange,提问作者ccie50268
相关产品推荐
相关产品推荐

