这里需要注意的重要一点是,在命令行中您不能传入 python 对象作为参数。您当前使用的 shell 将解析参数并根据其自己的参数解析规则将它们传入。
话虽这么说,你不能传入 python 字典。然而,像 JSON 这样的东西可以让你非常接近。
JSON - 或 JavaScript 对象表示是一种获取 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]}'
or
python saver.py "{\"names\": [\"J.J.\", \"April's\"], \"years\": [25, 29]}"
请注意,引用内容是 shell 的一个功能,因此 YMMV 可能会有所不同(例如,如果您使用某些 exec 方法来调用脚本,则可能不需要转义,因为可能不会调用 bash shell。)