我正在尝试从计算机上的另一个 python 脚本在服务器上远程启动 python 脚本。目标是通过 SSH 传输类中的一些数据(例如,data 是我要传输的字符串。当然,使用 pickle 作为字符串是没有意义的,这只是为了示例)。
我想要这样的东西:
脚本(在计算机上):maCo 是 SSH 连接。
import pickle
data = 'é&'
data_bytes = pickle.dumps(data)
maCo.sendCmd(['python3', 'serverScript.py', '-ma', data_bytes])
脚本(在服务器上)
import argparse, pickle
parser = argparse.ArgumentParser()
parser.add_argument("-ma", "--myarg", help="Arg", type=bytes)
args = parser.parse_args()
data = pickle.loads(args.myarg)
我尝试将字节转换为字符串,但没有成功。 感谢您的帮助
最佳答案
我不确定你想从你的问题中做什么,但我可以猜测......
如果您正在寻找一个可以帮助您建立 ssh 连接然后发送 python 对象的软件包,pathos
能够建立 ssh 隧道或直接 ssh 连接 - 那么您可以通过它进行任何类型的通信(通常是套接字到套接字通信,如 zmq 提供的,或其他一些 rpc 连接 - 我经常使用并行Python
)。线路上的所有通信都可以进行 pickle,但实际上它们只需要是序列化对象即可。 pathos
试图为您提供一个功能接口(interface)来使用 ssh 以及并行 pipe
和 map
构造。
此外,如果您希望传输类对象或类实例,并且使用 pickle
来序列化对象,则需要在已存在的模块中定义该类在远程计算机上并且位于远程 PYTHONPATH
上。如果您使用 dill
序列化您的类对象或实例,则不需要提前在远程系统上使用该类。这是因为 pickle
通过引用序列化类,而 dill
可以存储整个类对象或实例(或通过引用序列化)。
在此处获取 pathos
和 dill
:https://github.com/uqfoundation
我相信 IPython
最近也能够执行其中的一些操作,但是您仍然需要 dill
来发送序列化的类实例(如上所述)。
关于python - 通过 SSH 传输 pickle 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27750925/