Python脚本接收PowerShell传递的JSON命令行参数报错求助
解决方案:PowerShell传递JSON到Python脚本的参数问题
问题根源
你看到的Unexpected token ':'错误是PowerShell抛出的语法错误,不是Python的问题。PowerShell会把不带引号的{"Items":...}当成自己的脚本块/哈希表语法解析,而JSON的冒号用法不符合PowerShell的语法规则,所以直接触发了解析错误。
修正步骤
1. 修改PowerShell调用命令
必须把整个JSON字符串用引号包裹,让PowerShell把它作为一个完整的参数传递给Python:
- 优先用单引号(PowerShell中单引号是原样字符串,不会解析内部转义符):
Python script.py '{"Items":[{"Name":"foo","File":"\\\\files\\foo\\foo.csv"},{"Name":"bar","File":"\\\\files\\bar\\bar.csv"},{"Name":"baz","File":"\\\\files\\baz\\baz.csv"}]}'
- 如果JSON中包含单引号,改用双引号并转义内部的双引号(用
`转义):
Python script.py "{`"Items`":[{`"Name`":`"foo`",`"File`":`"\\\\files\\foo\\foo.csv`"},{`"Name`":`"bar`",`"File`":`"\\\\files\\bar\\bar.csv`"},{`"Name`":`"baz`",`"File`":`"\\\\files\\baz\\baz.csv`"}]}"
2. 验证Python代码
你原来的Python代码本身是正确的,只要PowerShell正确传递参数,就能正常解析JSON为字典。可以添加打印语句验证接收到的参数:
import sys import json if len(sys.argv) > 1: # 先打印接收到的参数,确认是否完整 print("接收到的参数:", sys.argv[1]) d = json.loads(sys.argv[1]) print("解析后的字典:", d)
额外提示
如果Power Automate生成的JSON内容动态变化,建议在PowerShell中先把JSON内容保存到变量,再传递给Python,避免手动转义出错:
$jsonContent = '{"Items":[{"Name":"foo","File":"\\\\files\\foo\\foo.csv"},{"Name":"bar","File":"\\\\files\\bar\\bar.csv"},{"Name":"baz","File":"\\\\files\\baz\\baz.csv"}]}' Python script.py $jsonContent
内容的提问来源于stack exchange,提问作者iBeMeltin
相关产品推荐
相关产品推荐

