--- a/src/eric7/UI/UserInterface.py Wed Jul 03 09:23:38 2024 +0200 +++ b/src/eric7/UI/UserInterface.py Wed Jul 03 10:39:16 2024 +0200 @@ -24,7 +24,6 @@ from PyQt6.QtCore import ( PYQT_VERSION_STR, QDate, - QObject, QProcess, QSize, Qt, @@ -65,6 +64,7 @@ from eric7.Debugger.DebugServer import DebugServer from eric7.Debugger.DebugUI import DebugUI from eric7.EricCore import EricFileSystemWatcher +from eric7.EricCore.EricStdRedirector import EricStdRedirector from eric7.EricGui import EricPixmapCache from eric7.EricGui.EricAction import EricAction, createActionGroup from eric7.EricNetwork.EricNetworkIcon import EricNetworkIcon @@ -115,92 +115,6 @@ SSL_AVAILABLE = False -class Redirector(QObject): - """ - Helper class used to redirect stdout and stderr to the log window. - - @signal appendStderr(str) emitted to write data to stderr logger - @signal appendStdout(str) emitted to write data to stdout logger - """ - - appendStderr = pyqtSignal(str) - appendStdout = pyqtSignal(str) - - def __init__(self, stderr, parent=None): - """ - Constructor - - @param stderr flag indicating stderr is being redirected - @type bool - @param parent reference to the parent object - @type QObject - """ - super().__init__(parent) - self.stderr = stderr - self.buffer = "" - - def __nWrite(self, n): - """ - Private method used to write data. - - @param n max number of bytes to write - @type int - """ - if n: - line = self.buffer[:n] - if self.stderr: - self.appendStderr.emit(line) - else: - self.appendStdout.emit(line) - self.buffer = self.buffer[n:] - - def __bufferedWrite(self): - """ - Private method returning number of characters to write. - - @return number of characters buffered or length of buffered line - @rtype int - """ - return self.buffer.rfind("\n") + 1 - - def flush(self): - """ - Public method used to flush the buffered data. - """ - self.__nWrite(len(self.buffer)) - - def write(self, s): - """ - Public method used to write data. - - @param s data to be written (it must support the str-method) - @type Any - """ - self.buffer += str(s) - self.__nWrite(self.__bufferedWrite()) - - def isatty(self): - """ - Public method to indicate a tty. - - Note: This always reports 'False'. - - @return flag indicating a tty - @rtype bool - """ - return False - - @property - def encoding(self): - """ - Public method to report the used encoding. - - @return used encoding - @rtype str - """ - return Preferences.getSystem("IOEncoding") - - class UserInterfaceSide(enum.Enum): """ Class defining the supported sides of the user interface. @@ -341,10 +255,10 @@ logging.getLogger(__name__).debug("Initializing Basic Services...") # Generate the redirection helpers - self.stdout = Redirector(False, self) - self.stdout.appendStdout.connect(self.appendToStdout) - self.stderr = Redirector(True, self) - self.stderr.appendStderr.connect(self.appendToStderr) + self.stdout = EricStdRedirector(False, self) + self.stdout.stdoutString.connect(self.appendToStdout) + self.stderr = EricStdRedirector(True, self) + self.stderr.stderrString.connect(self.appendToStderr) # Redirect sys.stdout and/or sys.stderr if those are None if sys.stdout is None or UserInterface.ReleaseMode: sys.stdout = self.stdout