def execute_on_target(self, commandToExecute, block=True, env={}, cwd=None): prefix = helper.get_env_var_setting_string(env) command = "{} ".format(prefix) + commandToExecute if cwd: command = "cd {}; ".format(cwd) + command log.info("executing '" + command + "' on target") stdin, stdout, stderr = self.sshClient.exec_command(command) stdoutBuffer = Buffer() stdoutReader = AsynchronousPipeReader(stdout, stdoutBuffer) stderrBuffer = Buffer() stderrReader = AsynchronousPipeReader(stderr, stderrBuffer) if (block): returnCode = stdout.channel.recv_exit_status( ) #block till call is finished stdoutReader.stop(withTimeout=True) stderrReader.stop(withTimeout=True) return stdoutBuffer.get_all_data(), stderrBuffer.get_all_data( ), returnCode return None
def execute_on_target(self, commandToExecute, block=True, env={}, cwd=None, timeout=None): prefix = helper.get_env_var_setting_string(env) command = "{} ".format(prefix) + commandToExecute if cwd: command = "cd {}; ".format(cwd) + command log.info("[{}]{}".format(self.name, command)) stdin, stdout, stderr = self.sshClient.exec_command(command) stdoutBuffer = Buffer() stdoutReader = AsynchronousPipeReader(stdout, stdoutBuffer) stderrBuffer = Buffer() stderrReader = AsynchronousPipeReader(stderr, stderrBuffer) if block: if timeout: # poll on application exit with timeout to prevent infinite blocking endTime = time.time() + timeout while time.time( ) < endTime and not stdout.channel.exit_status_ready(): time.sleep(0.1) if not stdout.channel.exit_status_ready(): return [], ["<timeout>"], 1 # get application exit status blocking. will immediately succeed when timeout was given returnCode = stdout.channel.recv_exit_status() stdoutReader.stop(withTimeout=True) stderrReader.stop(withTimeout=True) return stdoutBuffer.get_all_data(), stderrBuffer.get_all_data( ), returnCode return None
def __init__(self, stdin, stdout, stderr, name, workingDirectoryAbsolute, nameExtension=""): self.stdin = stdin self.stdout = stdout self.stderr = stderr self.name = name # executable name # description name so one can make a difference between two applications started from the same executable self.extendedName = name + nameExtension self.started = False self.initialised = True self.initialisationMessage = None self.initialisationWatchID = None self.stdoutReader = None self.stdoutBuffer = None self.stdoutBufferWatcher = None self.stderrReader = None self.stderrBuffer = None self.stderrBufferWatcher = None self.workingDirectoryAbsolute = workingDirectoryAbsolute self.rendererConfirmationNr = 0 if self.stdout: self.stdoutBuffer = Buffer() self.stdoutBufferWatcher = BufferWatcher(self.stdoutBuffer) self.initialisationWatchID = self.start_watch_stdout() self.stdoutReader = AsynchronousPipeReader( self.stdout, self.stdoutBuffer, "stdoutReader-" + self.name) if self.stderr: self.stderrBuffer = Buffer() self.stderrBufferWatcher = BufferWatcher(self.stderrBuffer) self.stderrReader = AsynchronousPipeReader( self.stderr, self.stderrBuffer, "stderrReader-" + self.name)
def __init__(self, stdin, stdout, stderr, name, workingDirectoryAbsolute, nameExtension=""): self.stdin = stdin self.stdout = stdout self.stderr = stderr self.name = name # executable name self.nameExtension = nameExtension self.started = False self.initialised = True self.initialisationMessage = None self.initialisationWatchID = None self.stdoutReader = None self.stdoutBuffer = None self.stdoutBufferWatcher = None self.stderrReader = None self.stderrBuffer = None self.stderrBufferWatcher = None self.workingDirectoryAbsolute = workingDirectoryAbsolute self.rendererConfirmationNr = 0 if self.stdout: self.stdoutBuffer = Buffer() self.stdoutBufferWatcher = BufferWatcher(self.stdoutBuffer) self.initialisationWatchID = self.start_watch_stdout() self.stdoutReader = AsynchronousPipeReader( self.stdout, self.stdoutBuffer, "stdoutReader-" + self.name) if self.stderr: self.stderrBuffer = Buffer() self.stderrBufferWatcher = BufferWatcher(self.stderrBuffer) self.stderrReader = AsynchronousPipeReader( self.stderr, self.stderrBuffer, "stderrReader-" + self.name)