运行 python 脚本时,JSON 文本作为命令行参数

问题描述 投票:0回答:1

我读过有关使用 python 将 JSON 文本作为命令行参数传递的类似问题,但没有一个解决方案适用于我的情况。

我正在自动化一个 python 脚本,并且自动化运行一个 powershell 脚本,该脚本采用从电源自动化流程生成的 JSON 对象。一切都很顺利,直到在我的 python 脚本中处理 JSON 为止。

我的目标是将 JSON 转换为字典,以便我可以在代码中使用键值对。

我的 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 如下所示:

{
    "Items": [
        {
            "Name": "foo",
            "File": "\\\\files\\foo\\foo.csv"
        },
        {
            "Name": "bar",
            "File": "\\\\files\\bar\\bar.csv"
        },
        {
            "Name": "baz",
            "File": "\\\\files\\baz\\baz.csv"
        }
    ]
}

我尝试了这个解决方案:

if len(sys.argv) > 1:
        d = json.loads(sys.argv[1])
        print(d)

但它返回此错误:

Unexpected token ':' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

我不确定如何解决这个问题,任何建议都会有帮助!

python json powershell
1个回答
0
投票

您的代码在 PowerShell 端看起来不错,只是在 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"}]}'

然后假设你的 Python 代码是:

import json
import sys

if len(sys.argv) > 1:
    d = json.loads(sys.argv[1])
    for i in d['Items']:
        print(i)

那么 PowerShell 控制台中的输出将是:

{'Name': 'foo', 'File': '\\\\files\\foo\\foo.csv'}
{'Name': 'bar', 'File': '\\\\files\\bar\\bar.csv'}
{'Name': 'baz', 'File': '\\\\files\\baz\\baz.csv'}
© www.soinside.com 2019 - 2024. All rights reserved.