通过SSH传输pickle字节

时间:2015-01-03 01:45:18

标签: python ssh pickle

我试图在我的计算机上从另一个python脚本远程启动服务器上的python脚本。目标是通过SSH传输一些类中的数据(例如,数据是我想要传输的字符串。当然,对于字符串使用pickle是没有意义的,例如,这是juste)。

我想要那样的东西:

脚本(在计算机上):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)

我尝试将字节转换为字符串,但这并不成功。 谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

我不确定你想从问题中做什么,但我可以猜到......

如果您正在寻找一个可以帮助您建立ssh连接然后发送python对象的包,pathos能够建立ssh-tunnel或直接ssh连接 - 那么你可以管道无论你想通过什么类型的通信(通常是套接字到套接字的通信,如zmq提供,或者其他rpc连接 - 我经常使用parallelpython)。线上的所有通信都可以被腌制,但实际上它们只需要是序列化的对象。 pathos尝试为您提供一个功能界面,以使用ssh和并行pipemap构造。

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

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

我相信IPython最近也能够做到这一点,但您仍然需要dill最有可能发送序列化类实例(如上所述)。