Import modules using RPYC

2019-05-21 11:20发布

问题:

I'm trying to remote into an interactive shell and import modules within python 2.7. I'm getting hung up. So far this is what I've got:

import rpyc
import socket

hostname = socket.gethostname()
port = 12345

connections = rpyc.connect(hostname,port)
session = connections.root.getSession()

session exists

>>>session
<blah object at 0xMore-Goop>

I want to issue an import sys so I can add another module to the path. However when I try to see if modules exist in the path I get the following:

>>>connections.modules
AttributeError: 'Connection' object has no attribute 'modules'

What I need to execute remotely is the following:

import sys
sys.path.append(path/to/import)
import file

log = file.logger(session, path/to/log)

Is it possible to have rpyc issue the above content? Thanks in advance

回答1:

You can add the following methods to the service:

import sys, importlib, rpyc
...

class MyService(rpyc.Service):
    ...
    def exposed_import_module(self, mod):
        return importlib.import_module(mod)
    def exposed_add_to_syspath(self, path):
        return sys.path.append(path)

and access it like this:

connections.root.add_to_syspath('path/to/import')
file = connections.root.import_module('file')
file.logger(session, 'path/to/log')