¿Qué módulo RPC debo usar para implementar RCP en Python y poder cambiar el método de conexión más adelante?

Tengo que implementar algunos RPC de Python a Python, pero los métodos de conexión son bastante limitados por razones de seguridad.

Actualmente parece que puedo conectarme usando SSH y ejecutar un solo script de python en el sistema remoto.

Esto puede cambiar en el futuro cuando tengamos que conectarnos utilizando otra cosa, tal vez telnet así que me gustaría una solución que funcione con diferentes protocolos.

Otra limitación potencial es con respecto a la versión de Python, tiene que funcionar con Python 2.5-2.7 incluso si el cliente y el servidor están ejecutando versiones diferentes.

Lo que debería usar, por favor sugiera solo si tuvo una experiencia exitosa con él, de lo contrario también puedo buscar en Google;)

Yo diría que la forma más fácil de comunicar dos procesos Python diferentes en su caso es usar pyro3 . Recientemente utilicé pyro4 en un proyecto pequeño y fue muy efectivo para que me concentrara en la información que quería enviar / recibir en lugar de en la forma de codificarla o decodificarla correctamente.

Te recomiendo que uses v3 porque v4 no está probado contra Python 2.5 de acuerdo con el archivo tox.ini en las fonts, por lo que es posible que tengas algunos problemas allí.

Con respecto a las redes, esta biblioteca se ocupa de los sockets en sí, por lo que no hay ningún soporte explícito para telnet o ssh (aunque el uso de paramiko está en la lista de tareas pendientes). Hene, probablemente necesitará confiar en los túneles ssh como en este ejemplo .

Como solución parcial para Python 2.6+, puede echar un vistazo a Versile Python (actualmente en desarrollo), solo agregamos soporte para la comunicación de bytes a través de tuberías (requiere una plataforma que permita seleccionar. Seleccione los descriptores de archivos de tuberías, es decir, no Windows). Esto permite enlaces a VPy ORBs a través de canalizaciones o stdin / stdout. Vea esta receta para ver un ejemplo de cómo se puede usar con ssh.

Versile Python requiere Python 2.6+ o 3.x, por lo que desafortunadamente no funciona con 2.5.

Spyne admite protocolos y transportes conectables, pero aún no es compatible con SSH (o cualquier otro transporte similar a un socket). Es un proyecto estable pero bastante nuevo, especialmente la lógica del cliente necesita un trabajo serio.

En cuanto a su pregunta original, entre los serializadores con los que estoy familiarizado (que es principalmente lo que ve en el sitio web de spyne) el más adecuado para canalizar a través de un transporte de flujo es MessagePack, ya que admite el iterador sobre el archivo -Objeto (también conocido como la deserialización de transmisión).

¿Le interesaría usar algo con rabbitmq para enviar comandos y registros de recepción?

https://github.com/nvalerkos/cronio

Python 2.7 necesita un rabbitmq.