diff --git a/news/trace3.rst b/news/trace3.rst new file mode 100644 index 000000000..ed5ab0042 --- /dev/null +++ b/news/trace3.rst @@ -0,0 +1,23 @@ +**Added:** + +* Added mode ``$XONSH_TRACE_SUBPROC=3`` to show more information about pipeline. + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* + +**Security:** + +* diff --git a/xonsh/procs/specs.py b/xonsh/procs/specs.py index 6e4d3cc35..0e6480719 100644 --- a/xonsh/procs/specs.py +++ b/xonsh/procs/specs.py @@ -958,7 +958,7 @@ def _trace_specs(trace_mode, specs, cmds, captured): else: r = {"cmds": cmds, "captured": captured} print(f"Trace run_subproc({repr(r)})", file=sys.stderr) - if trace_mode == 2: + if trace_mode >= 2: for i, s in enumerate(specs): pcls = s.cls.__module__ + "." + s.cls.__name__ pcmd = ( @@ -967,11 +967,23 @@ def _trace_specs(trace_mode, specs, cmds, captured): p = { "cmd": pcmd, "cls": pcls, - "alias": s.alias_name, - "bin": s.binary_loc, - "threadable": s.threadable, - "bg": s.background, } + p |= { + a: getattr(s, a, None) + for a in ["alias_name", "binary_loc", "threadable", "background"] + } + if trace_mode == 3: + p |= { + a: getattr(s, a, None) + for a in [ + "stdin", + "stdout", + "stderr", + "captured", + "captured_stdout", + "captured_stderr", + ] + } p = {k: v for k, v in p.items() if v is not None} print(f"{i}: {repr(p)}", file=sys.stderr)