From 24fdfece1ed274837488db06e13ee38da810145f Mon Sep 17 00:00:00 2001 From: a <1@1.1> Date: Thu, 25 Apr 2024 20:44:06 +0200 Subject: [PATCH] XONSH_TRACE_SUBPROC returns more useful details. --- news/trace_subproc.rst | 23 +++++++++++++++++++++++ xonsh/procs/specs.py | 12 ++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 news/trace_subproc.rst diff --git a/news/trace_subproc.rst b/news/trace_subproc.rst new file mode 100644 index 000000000..2966703bf --- /dev/null +++ b/news/trace_subproc.rst @@ -0,0 +1,23 @@ +**Added:** + +* + +**Changed:** + +* XONSH_TRACE_SUBPROC returns more useful details. + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* + +**Security:** + +* diff --git a/xonsh/procs/specs.py b/xonsh/procs/specs.py index 660cfc853..9726c0251 100644 --- a/xonsh/procs/specs.py +++ b/xonsh/procs/specs.py @@ -884,14 +884,22 @@ def run_subproc(cmds, captured=False, envs=None): Lastly, the captured argument affects only the last real command. """ + + specs = cmds_to_specs(cmds, captured=captured, envs=envs) + if XSH.env.get("XONSH_TRACE_SUBPROC", False): tracer = XSH.env.get("XONSH_TRACE_SUBPROC_FUNC") if callable(tracer): tracer(cmds, captured=captured) else: - print(f"TRACE SUBPROC: {cmds}, captured={captured}", file=sys.stderr) + r = {"cmds":cmds, "captured": captured} + print(f"Trace run_subproc({repr(r)}):", file=sys.stderr) + for i, s in enumerate(specs): + cls = s.cls.__module__ + '.' + s.cls.__name__ + p = {"cmd": s.args, "cls":cls, "alias":s.alias_name, "bin":s.binary_loc, "bg":s.background, "threadable": s.threadable} + print(f'{i}: {repr(p)}') + - specs = cmds_to_specs(cmds, captured=captured, envs=envs) cmds = [ _flatten_cmd_redirects(cmd) if isinstance(cmd, list) else cmd for cmd in cmds ]