这里要注意的重要一点是,在命令行中,您不能将 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]}'
或者
python saver.py "{\"names\": [\"J.J.\", \"April's\"], \"years\": [25, 29]}"
请注意,引用内容是您的 shell 的一个函数,因此 YMMV 可能会有所不同(例如,如果您使用某些 exec 方法来调用脚本,则可能不需要转义,因为可能不会调用 bash shell。)