def execute(command, host=None, bg=True, **kwds): '''execute a command (possibly) on a remote host Execute a process, and return the launcher. Use 'response' to retrieve the response from the executed command. Use 'kill' to kill the launcher, and 'pid' to get the process id for the launcher. Inputs: command -- command string to be executed host -- hostname of execution target [default = None (i.e. run locally)] bg -- run as background process? [default = True] ''' #XXX: options, background, stdin can be set w/ kwds (also name, launcher) bg = bool(bg) # overrides 'background' if host in [None, '']: from pathos.connection import Pipe launcher = Pipe(**kwds) launcher(command=command, background=bg) else: from pathos.secure import Pipe opt = kwds.pop('options', '-q') launcher = Pipe(**kwds) launcher(options=opt, command=command, host=host, background=bg) pathos.logger().info('executing {%s}', launcher.message) launcher.launch() #response = launcher.response() #launcher.kill() #return response return launcher
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