def serve(server, host=None, port=None, profile='.bash_profile'): '''begin serving RPC requests Inputs: server -- name of RPC server (i.e. 'ppserver') host -- hostname on which a server should be launched port -- port number (on host) that server will accept request at profile -- file on remote host that instantiates the user's environment [default = '.bash_profile'] ''' if host is None: #XXX: and...? profile = '' else: profile = 'source %s; ' % profile file = '~/bin/%s.py' % server #XXX: _should_ be on the $PATH if port is None: port = randomport(host) command = "%s -p %s" % (file,port) rserver = execute(command, host, bg=True) response = rserver.response() logging.info('response = %r', response) if response in ['', None]: #XXX: other responses allowed (?) pass else: #XXX: not really error checking... logging.error('invalid response = %r', response) from time import sleep delay = 2.0 sleep(delay) return rserver
def serve(server, host=None, port=None, profile='.bash_profile'): '''begin serving RPC requests Inputs: server -- name of RPC server (i.e. 'ppserver') host -- hostname on which a server should be launched port -- port number (on host) that server will accept request at profile -- file on remote host that instantiates the user's environment [default = '.bash_profile'] ''' if host is None: #XXX: and...? profile = '' else: profile = 'source %s; ' % profile file = '~/bin/%s.py' % server #XXX: _should_ be on the $PATH if port is None: port = randomport(host) command = "%s -p %s" % (file,port) rserver = execute(command, host, bg=True) response = rserver.response() pathos.logger().info('response = %r', response) if response in ['', None]: #XXX: other responses allowed (?) pass else: #XXX: not really error checking... pathos.logger().error('invalid response = %r', response) from time import sleep delay = 2.0 sleep(delay) return rserver
def randomport(host=None): '''select a open port on a (possibly) remote host Inputs: host -- hostname on which to select a open port ''' from pathos.portpicker import randomport if not host: return randomport() from pathos.LauncherSSH import LauncherSSH from pathos.portpicker import __file__ as src # make sure src is a .py file, not .pyc or .pyo src = src.rstrip('co') launcher = LauncherSSH() #XXX: use pox.which / which_python? launcher(command='python', host=host, background=False, stdin=open(src)) logging.info('executing {python <%s} on %s', src, host) launcher.launch() try: rport = int(launcher.response()) except: from Tunnel import TunnelException raise TunnelException("failure to pick remote port") # return remote port number return rport
def randomport(host=None): '''select a open port on a (possibly) remote host Inputs: host -- hostname on which to select a open port ''' from pathos.portpicker import randomport if not host: return randomport() from pathos.secure import Pipe from pathos.portpicker import __file__ as src # make sure src is a .py file, not .pyc or .pyo src = src.rstrip('co') launcher = Pipe() #XXX: use pox.which / which_python? launcher(command='python', host=host, background=False, stdin=open(src)) pathos.logger().info('executing {python <%s} on %s', src, host) launcher.launch() try: rport = int(launcher.response()) except: from pathos.secure import TunnelException raise TunnelException("failure to pick remote port") # return remote port number return rport