python命令行参数引用_如何将字典作为命令行参数传递给python脚本?

如何将字典作为命令行参数传递给python脚本?

我需要获取字典,其中键是字符串,值是一些元素的列表

(例如看起来像:

command_line_arguments = {"names" : ["J.J.", "April"], "years" : [25, 29]}

我试过像

if __name__ == '__main__':

args = dict([arg.split('=') for arg in sys.argv[2:]]) # also tried with 1 but doesn't work

main(args)

而我正在调用脚本

$python saver.py names=["J.J.", "April"] years=[25, 29]

但它不起作用,字典长度为0,需要2.任何人都可以帮我传递并在main中创建字典.

解决方法:

这里需要注意的重要一点是,在命令行中,您不能将python对象作为参数传递.您正在使用的当前shell将解析参数并根据它自己的参数解析规则传递它们.

话虽这么说,你不能传入python字典.但是,像JSON这样的东西可以让你变得非常接近.

JSON – 或JavaScript Object Representation是一种获取Python对象并将其转换为类似字符串的表示形式的方法,适用于传递给多种语言.话虽这么说,你可以传入这样的字符串:

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

在你的python脚本中,执行以下操作:

import json

data=json.loads(argv[1])

这将返回一个表示您想要传入的数据的字典.

同样,您可以使用python字典并将其转换为字符串:

import json

data={'names': ["J.J.", "April"], 'years': [25,29]}

data_str=json.dumps(data)

还有其他方法可以实现这一点,尽管JSON相当普遍.需要注意的关键是,不管你是怎么做的 – 你都不会将字典传递给Python, – 你将传递一组参数(这些都是字符串),你需要以某种方式转换成你需要的python类型.

@EvanZamir – 请注意(通常)在shell中,如果它们出现在引用的字符串中,则需要转义引号.在我的示例中,我使用单引号引用JSON数据,并且json字符串本身使用双引号,从而避免了对引号的需要.

如果你混合引号(使用双引号来引用参数,并在里面引用双引号),那么shell将要求它被转义,否则它遇到的第一个双引号被认为是参数的“结束引号”.请注意,在示例中,我使用单引号括起JSON字符串,并在字符串中使用双引号.如果我在字符串中使用单引号,我需要使用反斜杠来逃避它们,即:

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

要么

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

请注意,引用内容是shell的一个函数,因此YMMV可能会有所不同(例如,如果使用某种exec方法来调用脚本,则可能不需要转义,因为可能不会调用bash shell.)

标签:python,python-2-7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值