通过 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 和并行 pipe
和 map
构造。
此外,如果您希望传输 class 对象或 class 实例,并且您正在使用 pickle
序列化您的对象,则需要 class 在已经存在于远程计算机上并且位于远程 PYTHONPATH
上的模块中定义。如果您使用 dill
序列化您的 class 对象或实例,则不需要提前在远程系统上使用 class。这是因为 pickle
通过引用序列化 classes,而 dill
可以存储整个 class 对象或实例( 或 通过序列化参考)。
在此处获取 pathos
和 dill
:https://github.com/uqfoundation
我相信 IPython
最近也能做到其中的一些,但您仍然需要 dill
最有可能发送序列化的 class 实例(如上所述).
我正在尝试从我计算机上的另一个 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 和并行 pipe
和 map
构造。
此外,如果您希望传输 class 对象或 class 实例,并且您正在使用 pickle
序列化您的对象,则需要 class 在已经存在于远程计算机上并且位于远程 PYTHONPATH
上的模块中定义。如果您使用 dill
序列化您的 class 对象或实例,则不需要提前在远程系统上使用 class。这是因为 pickle
通过引用序列化 classes,而 dill
可以存储整个 class 对象或实例( 或 通过序列化参考)。
在此处获取 pathos
和 dill
:https://github.com/uqfoundation
我相信 IPython
最近也能做到其中的一些,但您仍然需要 dill
最有可能发送序列化的 class 实例(如上所述).