通过命令行传递字典参数,并在python脚本中访问它们

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

我正在尝试将由参数组成的字典传递给python脚本,然后在脚本中使用该字典。我将字典保存在气流的环境变量中。

例如,脚本应在命令行上运行,python test.py dict_name

dict_name看起来像这样,

{ "path": "firstlevel/secondlevel", "name": "xyz", "key": "12345" }

而且,我需要使用上述字典的键来代替python脚本中的实际值,即test.py

我尝试在类的init函数中使用data = sys.argv [1]。但是,它给了我一个列表,而不是字典。这样一来,就不可能使用字典的功能。

def __init__(self, data = sys.argv[1]):
    print data

我正在这样实例化对象,

f = class_name(sys.argv[1:])

我得到的输出是,

['path', ':', 'firstlevel/secondlevel', 'name', ':', 'xyz', 'key', ':', '12345']

我的目标是将数据作为字典而不是python脚本中的列表来获取,因为我只想用键替换python脚本上的值。

这里是用例,可以更清楚地说明我的观点。

fun(name = 'xyz', key = 12345)

收件人

fun(sys.argv['name'], sys.argv['key'])

Traceback

Traceback(最近一次通话最近):文件“ test.py”,第13行,在objec_name = class_name(sys.argv [1:])文件“ test.py”,第6行,在初始化数据= json.loads (sys.argv [1])文件“ C:\ Users \ Sarvesh Pandey \ AppData \ Local \ Programs \ Python \ Python38 \ lib \ json_init_.py”,第357行,在加载中返回_default_decoder.decode文件“ C :\ Users \ Sarvesh Pandey \ AppData \ Local \ Programs \ Python \ Python38 \ lib \ json \ decoder.py“,第337行,在解码obj,结束= self.raw_decode(s,idx = _w(s,0)。 end())

python dictionary unix command-line-arguments sys
1个回答
0
投票

JSON-或JavaScript对象表示形式是采用Python对象并将其转换为类似字符串的表示形式的一种方法,适合于传递给多种语言。

python saver.py '{"names": ["J.J.", "April"], "years": [25, 29]}'

在您的python脚本中,执行此操作:

import json
data=json.loads(argv[1])

这将为您提供一个字典,该字典代表您想要传递的数据。

然后您可以按预期的方式应用该功能。

fun(data['name'], data['key'])

编辑:您还需要考虑解析问题

例如

如果运行print sys.argv[1],您可能会得到'{favorited:,json模块无法将其解码为json对象。

尝试转义您的内部引号,以便将其作为1个参数传递,如下所示:

"{"\""favorited"\"": false, "\""contributors"\"": null}"
© www.soinside.com 2019 - 2024. All rights reserved.