通过命令行将字典传递给Python脚本
如何通过命令行将字典传递到另一个python脚本的python脚本?我使用子进程来调用第二个脚本。通过命令行将字典传递给Python脚本
我来的选项是:
I)构建一个模块来解析字符串中的字典(比我希望去的更深入)。
II)使用一个临时文件写泡菜,并通过文件名作为参数
III)不允许词典,但处理键/值对(即“prog.py科亚值a KEYB valub”)
该解决方案不一定要用户友好,但需要编程友好。由于安全和资源问题,第二个程序必须作为单独的进程运行。
除了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'}
xmlrpc怎么样?
客户 http://docs.python.org/library/xmlrpclib.html
服务器 http://docs.python.org/library/simplexmlrpcserver.html
两者都是蟒蛇核心。
看起来像是为了传递'dict'而过度使用。 – 2010-09-23 17:19:38
你看过pickle模块通过stdout/stdin传递数据吗?
实施例:
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.
不是一个坏主意! – jathanism 2010-09-23 17:13:15
只是打印一个python脚本
print("dict=" + str(dict))
字典,并使用它作为
(python script1.py; cat script2.py) | python -
,现在你应该能够获得通过在全局变量“字典”字典第二个python脚本。
如果字典中的内容(包括键和值)都可以表示为字符串,则应该能够将其作为字符串参数传递给第二个可以重新创建它的脚本。
d = {'a':1,'b':2}
d == eval(repr(d), None)
>>>True
编辑:下面是显示出其用一个简单的自定义类使用一个稍微复杂的例子:
class MyClass:
def __init__(self, a, b):
self.a = a
self.b = b
def __repr__(self):
return 'MyClass(%r, %r)' % (self.a, self.b)
def __eq__(self, other):
return (self.a == other.a) and (self.b == other.b)
d = {'foo':42, 'bar': MyClass(17,'astring') }
print 'd:', d
print 'repr(d):', repr(d)
print "d == eval(repr(d), {'MyClass':MyClass})?:", \
d == eval(repr(d), {'MyClass':MyClass})
# outputs:
# d: {'foo': 42, 'bar': MyClass(17, 'astring')}
# repr(d): {'foo': 42, 'bar': MyClass(17, 'astring')}
# d == eval(repr(d), {'MyClass':MyClass})?: True
这就是我正在寻找的 – 2010-09-23 18:06:04