通过命令行将字典传递给Python脚本
我想知道怎么从一个Python脚本通过命令行把一个字典传给另一个Python脚本。我用subprocess来调用第二个脚本。
我想到的几种方法是:
I) 创建一个模块,从字符串中解析出字典(这比我原本想的要复杂得多)。
II) 使用一个临时文件来写入一个pickle,然后把文件名作为参数传递。
III) 不允许使用字典,而是处理键值对(也就是说像这样“prog.py keya valuea keyb valueb”)。
这个解决方案不需要对用户友好,但必须对程序友好。第二个程序必须作为一个独立的进程运行,这是出于安全和资源的考虑。
6 个回答
6
如果你不需要特别复杂的数据结构,我推荐你试试 simplejson。在Python 2.6及以后的版本中,它作为一个内置模块(叫做 json
)可以直接使用。
9
你有没有看过 pickle 这个模块,用来在标准输出和标准输入之间传递数据?
下面是一个例子:
knights.py:
import pickle
import sys
desires = {'say': 'ni', 'obtain': 'shrubbery'}
pickle.dump(desires, sys.stdout)
roundtable.py:
import pickle
import sys
knightsRequest = pickle.load(sys.stdin)
for req in knightsRequest:
print "The knights %s %s." % (req, knightsRequest[req])
使用方法和输出结果:
$ python knights.py | python roundtable.py
The knights say ni.
The knights obtain shrubbery.
6
除了使用 pickle
,还有一个选择是 ast.literal_eval
,前提是你的字典里面只包含Python的基本数据类型。
>>> d = {3: 9, 'apple': 'orange'}
>>> s = str(d)
>>> s
"{3: 9, 'apple': 'orange'}"
>>> import ast
>>> x = ast.literal_eval(s)
>>> x
{3: 9, 'apple': 'orange'}