需要注意的重点是,在命令行中你不能将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函数,因此可能会有所不同(例如,如果您使用某些执行方法调用脚本,则可能不需要转义,因为可能不会调用bash shell。)