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

如何在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拆分参数:

  1. 修改GitHub Actions工作流
    在run命令中这样配置:

    run: python myscript.py -d '${{ toJSON(github.event.client_payload) }}'
    
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:30:55