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

Windows环境下向Python程序命令行传递JSON字符串及接收异常排查

我来帮你解决Windows下命令行传递JSON给Python脚本的问题,还有你遇到的格式异常情况~

问题根源

核心原因是Windows命令行(CMD/PowerShell)和Linux的bash对引号的解析规则完全不同:Ubuntu的shell会完整保留你传入的JSON引号结构,但Windows下的命令行处理引号时会自动转义或截断,导致你拿到的json_in丢失了内部双引号,还多了一层不必要的单引号包裹。

正确传递JSON的两种方式

根据你使用的Windows命令行工具,分两种场景处理:

1. 用CMD传递JSON

CMD对双引号的处理很严格,需要把整个JSON用双引号包裹,同时内部的双引号要转义成\":

python your_script.py "{\"key1\":\"val1\", \"key2\":[\"val2\", \"val3\"], \"key3\":\"val4\"}"

这样CMD才会把完整的JSON字符串传递给Python,不会丢失内部引号。

2. 用PowerShell传递JSON

PowerShell的引号规则更灵活,有两种写法:

  • 用单引号包裹整个JSON,内部双引号无需转义:
python your_script.py '{"key1":"val1", "key2":["val2", "val3"], "key3":"val4"}'
  • 用双引号包裹时,内部双引号要写成两个连续双引号(""):
python your_script.py "{""key1"":""val1"", ""key2"":[""val2"", ""val3""], ""key3"":""val4""}"
修复你的Python脚本

你的原脚本还有两个小问题:一是直接解构sys.argv容易因参数个数报错,二是没处理Windows下可能出现的外层多余引号。修改后的脚本如下:

import sys
import json

def main():
    # 先检查是否传入了参数
    if len(sys.argv) < 2:
        print("请传入JSON字符串作为命令行参数")
        sys.exit(1)
    
    json_in = sys.argv[1]
    # 清理外层可能的多余单/双引号(解决你遇到的"'{...}'"问题)
    json_in = json_in.strip('\'"')
    
    try:
        # 解析JSON
        parsed_data = json.loads(json_in)
        print("JSON解析成功:")
        print(parsed_data)
    except json.JSONDecodeError as e:
        print(f"JSON解析失败:{str(e)}")
        print("原始输入内容:", repr(json_in))

if __name__ == "__main__":
    main()

这个脚本会自动处理Windows下可能出现的引号异常,还加了参数检查和错误捕获,方便调试。

为什么Ubuntu没问题?

Ubuntu的bash等shell会正确识别双引号包裹的字符串,只要内部引号不冲突就会完整传递,所以你直接传入的JSON格式不会被篡改,Python能拿到标准的带双引号的JSON字符串,自然不会出现解析问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:46:48