コード例 #1
0
 def __init__(self, parent=None):
     super(InteractiveConsole, self).__init__(parent)
     self._stdout_col = QColor("#404040")
     self._app_msg_col = QColor("#4040FF")
     self._stdin_col = QColor("#22AA22")
     self._stderr_col = QColor("#FF0000")
     self._process = None
     self._args = None
     self._usr_buffer = ""
     self._clear_on_start = True
     self.process = QProcess()
     self._merge_outputs = False
     self.process.finished.connect(self._on_process_finished)
     self.process.error.connect(self._write_error)
     self.process.readyReadStandardError.connect(self._on_stderr)
     self.process.readyReadStandardOutput.connect(self._on_stdout)
     self._running = False
     self._writer = self.write
     self._user_stop = False
     font = "monospace"
     if sys.platform == "win32":
         font = "Consolas"
     elif sys.platform == "darwin":
         font = 'Monaco'
     self._font_family = font
     self.setFont(QFont(font, 10))
     self.setReadOnly(True)
コード例 #2
0
    def start_process(self, process, args=None, cwd=None, env=None):
        """
        Starts a process interactively.

        :param process: Process to run
        :type process: str

        :param args: List of arguments (list of str)
        :type args: list

        :param cwd: Working directory
        :type cwd: str

        :param env: environment variables (dict).
        """
        self.setReadOnly(False)
        if env is None:
            env = {}
        if args is None:
            args = []
        if not self._running:
            self.process = QProcess()
            self.process.finished.connect(self._on_process_finished)
            self.process.started.connect(self.process_started.emit)
            self.process.error.connect(self._write_error)
            self.process.readyReadStandardError.connect(self._on_stderr)
            self.process.readyReadStandardOutput.connect(self._on_stdout)
            if cwd:
                self.process.setWorkingDirectory(cwd)
            e = self.process.systemEnvironment()
            ev = QProcessEnvironment()
            for v in e:
                values = v.split('=')
                ev.insert(values[0], '='.join(values[1:]))
            for k, v in env.items():
                ev.insert(k, v)
            self.process.setProcessEnvironment(ev)
            self._running = True
            self._process_name = process
            self._args = args
            if self._clear_on_start:
                self.clear()
            self._user_stop = False
            self._write_started()
            self.process.start(process, args)
            self.process.waitForStarted()
        else:
            _logger().warning('a process is already running')