def run_command(self, cmd, *args): """Sends a command directly to this instance's command line @param cmd: Command to sent to command line @type cmd: C{str} @param args: Optional list of args to be passed with the command @type args: C{list} @raise exception: If unable to close process after running the command @return: The full response details from the command line @rtype: L{CommandLineResponse} @note: PRIVATE. Can be over-ridden in a child class """ # Wait for the process to complete and then read the output os_response = self.run_command_async(cmd, *args) std_out, std_err = os_response.process.communicate() os_response.standard_out = str(std_out).splitlines() os_response.standard_error = str(std_err).splitlines() os_response.return_code = os_response.process.returncode info = [ ("return code", logsafe_str(os_response.return_code)), ("standard out", logsafe_str("\n{0}".format("\n".join(os_response.standard_out)))), ("standard error", logsafe_str("\n{0}".format("\n".join( os_response.standard_error)))) ] log_info_block(self._log, info, heading='COMMAND LINE RESPONSE', log_level=DEBUG, one_line=True) # Clean up the process to avoid any leakage/wonkiness with # stdout/stderr try: os_response.process.kill() except OSError: # An OS Error is valid if the process has exited. We only # need to be concerned about other exceptions sys.exc_clear() os_response.process = None return os_response
def _build_command(self, cmd, *args): # Process command we received command = "{0} {1}".format(self.base_command, cmd) if self.base_command else cmd if args and args[0]: for arg in args[0]: command += "{0} {1}".format(command, arg) keys = set(os.environ).intersection(self.env_var_dict) set_env_vars = dict([(k, os.environ[k]) for k in keys]) info = [("command", logsafe_str(command)), ("args", logsafe_str(args)), ("set env vars", logsafe_str(set_env_vars))] log_info_block(self._log, info, heading='COMMAND LINE REQUEST', log_level=DEBUG, one_line=True) return command
def _build_command(self, cmd, *args): #Process command we received command = "{0} {1}".format( self.base_command, cmd) if self.base_command else cmd if args and args[0]: for arg in args[0]: command += "{0} {1}".format(command, arg) keys = set(os.environ).intersection(self.env_var_dict) set_env_vars = dict([(k, os.environ[k]) for k in keys]) info = [ ("command", logsafe_str(command)), ("args", logsafe_str(args)), ("set env vars", logsafe_str(set_env_vars))] log_info_block( self._log, info, heading='COMMAND LINE REQUEST', log_level=DEBUG, one_line=True) return command
def run_command(self, cmd, *args): """Sends a command directly to this instance's command line @param cmd: Command to sent to command line @type cmd: C{str} @param args: Optional list of args to be passed with the command @type args: C{list} @raise exception: If unable to close process after running the command @return: The full response details from the command line @rtype: L{CommandLineResponse} @note: PRIVATE. Can be over-ridden in a child class """ # Wait for the process to complete and then read the output os_response = self.run_command_async(cmd, *args) std_out, std_err = os_response.process.communicate() os_response.standard_out = str(std_out).splitlines() os_response.standard_error = str(std_err).splitlines() os_response.return_code = os_response.process.returncode info = [ ("return code", logsafe_str(os_response.return_code)), ("standard out", logsafe_str("\n{0}".format( "\n".join(os_response.standard_out)))), ("standard error", logsafe_str("\n{0}".format( "\n".join(os_response.standard_error))))] log_info_block( self._log, info, heading='COMMAND LINE RESPONSE', log_level=DEBUG, one_line=True) # Clean up the process to avoid any leakage/wonkiness with # stdout/stderr try: os_response.process.kill() except OSError: # An OS Error is valid if the process has exited. We only # need to be concerned about other exceptions sys.exc_clear() os_response.process = None return os_response