Skip to content

Commit

Permalink
Add an option to log to stdout
Browse files Browse the repository at this point in the history
  • Loading branch information
Fat-Zer committed Dec 12, 2024
1 parent 6608ff8 commit b6c03b0
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 13 deletions.
27 changes: 15 additions & 12 deletions printrun/pronterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,35 +81,38 @@ def format_length(mm, fractional=2):
return '%%.%df' % fractional % units + suffix

class ConsoleOutputHandler:
"""Handle console output. All messages go through the logging submodule. We setup a logging handler to get logged messages and write them to both stdout (unless a log file path is specified, in which case we add another logging handler to write to this file) and the log panel.
We also redirect stdout and stderr to ourself to catch print messages and al."""
"""Handle console output. All messages go through the logging submodule. We setup a logging handler to get logged
messages and write them to both stdout (unless a log file path is specified, in which case we add another logging
handler to write to this file) and the log panel. We also redirect stdout and stderr to ourselves to catch print
messages and al."""

def __init__(self, target, log_path):
def __init__(self, target, log_path, log_stdout):
self.stdout = sys.stdout
self.stderr = sys.stderr
sys.stdout = self
sys.stderr = self
self.print_on_stdout = not log_path
if log_path:
setup_logging(self, log_path, reset_handlers = True)
else:
setup_logging(sys.stdout, reset_handlers = True)

self.print_on_stdout = log_stdout or not log_path
self.target = target

setup_logging(self, log_path, reset_handlers=True)

def __del__(self):
sys.stdout = self.stdout
sys.stderr = self.stderr

def write(self, data):
try:
self.target(data)
except:
pass
except Exception as e:
# This shouldn't generally happen, unless there is something very wrong with the code
self.stderr.write(_("An exception occurred during an attempt to log a message: {}").format(e))

if self.print_on_stdout:
self.stdout.write(data)

def flush(self):
if self.stdout:
if self.print_on_stdout:
self.stdout.flush()

class PronterWindow(MainWindow, pronsole.pronsole):
Expand Down Expand Up @@ -223,7 +226,7 @@ def __init__(self, app, filename = None, size = winsize):
self.statusbar = self.CreateStatusBar()
self.statusbar.SetStatusText(_("Not connected to printer."))

self.t = ConsoleOutputHandler(self.catchprint, self.settings.log_path)
self.t = ConsoleOutputHandler(self.catchprint, self.settings.log_path, self.settings.log_stdout)
self.stdout = sys.stdout
self.slicing = False
self.loading_gcode = False
Expand Down
4 changes: 3 additions & 1 deletion printrun/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,9 @@ def __init__(self, root):
self._add(StringSetting("start_command", "", _("Start Command:"), _("Executable to run when the print is started"), "External"))
self._add(StringSetting("final_command", "", _("Final Command:"), _("Executable to run when the print is finished"), "External"))
self._add(StringSetting("error_command", "", _("Error Command:"), _("Executable to run when an error occurs"), "External"))
self._add(DirSetting("log_path", str(Path.home()), _("Log Path:"), _("Path to the log file. An empty path will log to the console."), "UI"))
self._add(DirSetting("log_path", str(Path.home()), _("Log Path:"),
_("Path to the log file. If the path is a directory the file will be named 'printrun.log'"), "UI"))
self._add(BooleanSetting("log_stdout", False, _("Log to console:"), _("Duplicate log messages to stdout"), "UI"))

self._add(HiddenSetting("project_offset_x", 0.0))
self._add(HiddenSetting("project_offset_y", 0.0))
Expand Down

0 comments on commit b6c03b0

Please sign in to comment.