通过 SSH 传输 pickle 字节

Transmit pickle bytes over SSH

我正在尝试从我计算机上的另一个 python 脚本远程启动服务器上的 python 脚本。目标是通过 SSH 传输一些 class 中的数据(例如,数据是我要传输的字符串。当然,对字符串使用 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 连接 - 我经常使用 parallelpython).线路上的所有通信都可以被 pickle,但实际上它们必须是序列化的对象。 pathos 试图为您提供一个功能接口来使用 ssh 和并行 pipemap 构造。

此外,如果您希望传输 class 对象或 class 实例,并且您正在使用 pickle 序列化您的对象,则需要 class 在已经存在于远程计算机上并且位于远程 PYTHONPATH 上的模块中定义。如果您使用 dill 序列化您的 class 对象或实例,则不需要提前在远程系统上使用 class。这是因为 pickle 通过引用序列化 classes,而 dill 可以存储整个 class 对象或实例( 通过序列化参考)。

在此处获取 pathosdillhttps://github.com/uqfoundation

我相信 IPython 最近也能做到其中的一些,但您仍然需要 dill 最有可能发送序列化的 class 实例(如上所述).