我在一个Linux服务器上运行了一个Python实例。我已经使用global类创建了一个全局数组。我想要将这个类的对象作为命令行参数传递给我在Windows虚拟机上运行的Python函数。我该如何在Python中将对象作为命令行参数传递?或者有更好的方法吗?
您可以使用json.dumps()
和json.loads()
或pickle.dumps()
和pickle.loads()
来实现此目的:
>>> import json
>>> json.dumps(['Hi'])
'["Hi"]'
>>> json.loads(_)
['Hi']
>>> import pickle
>>> pickle.dumps(['Hi'])
b'\x80\x03]q\x00X\x02\x00\x00\x00Hiq\x01a.'
>>> pickle.loads(_)
['Hi']
# app.py (adapted from examples in the Celery Getting Started tutorial
from celery import Celery
app = Celery('tasks', broker='amqp://guest@localhost//')
@app.task
def my_function(a, b):
return a * b
# main.py
import app
result = app.my_function.delay(4, 5)
print result.get()
# server.py
from taskit.backend import BackEnd
def my_function(a, b):
return a * b
backend = BackEnd(dict(my_function=my_function))
backend.main()
# client.py
from taskit.frontend import FrontEnd
backend_addr = '127.0.0.1'
frontend = FrontEnd([backend_addr])
print frontend.work('my_function', 4, 5)
shlex.quote()
这样的东西进行转义。 - pydsigner使用任何你想用的方法,在运行在不同计算机上的进程之间进行通信。
multiprocessing
标准库模块支持这种用例。Jupyter支持远程内核。以下是一个使用execnet
的代码示例。
如果你首先将对象序列化为字符串,那么可以将对象作为命令行参数传递。但是没有必要创建另一种远程执行Python代码的方式。