From 79f1bac97fc4e59d73d7888186f7e29e69c4467b Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Thu, 22 Feb 2024 12:48:14 +0000 Subject: [PATCH] main.py, exec_wrapper.py: improve error output --- mmgen/main.py | 7 +++---- scripts/exec_wrapper.py | 14 +++++++++----- test/cmdtest_py_d/ct_misc.py | 1 - test/tooltest2.py | 4 ++-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/mmgen/main.py b/mmgen/main.py index 0032ee87..b70d369b 100755 --- a/mmgen/main.py +++ b/mmgen/main.py @@ -41,10 +41,6 @@ def launch(*, mod=None, func=None, package='mmgen'): sys.stderr.write(yellow('\nEnd of file\n')) sys.exit(1) except Exception as e: - - if os.getenv('MMGEN_EXEC_WRAPPER'): - raise - try: errmsg = str(e.args[0]) except: @@ -70,6 +66,9 @@ def launch(*, mod=None, func=None, package='mmgen'): e = e)) + '\n' ) + if os.getenv('MMGEN_EXEC_WRAPPER'): + raise + sys.exit(d.exit_val) except SystemExit as e: diff --git a/scripts/exec_wrapper.py b/scripts/exec_wrapper.py index 7e59d815..ac4a7feb 100755 --- a/scripts/exec_wrapper.py +++ b/scripts/exec_wrapper.py @@ -38,7 +38,7 @@ def exec_wrapper_write_traceback(e,exit_val): import sys,os exc_line = ( - repr(e) if type(e).__name__ in ('MMGenError','MMGenSystemExit') else + f'{type(e).__name__}({e.mmcode})' if type(e).__name__ in ('MMGenError','MMGenSystemExit') else f'{type(e).__name__}: {e}') c = exec_wrapper_get_colors() @@ -68,14 +68,18 @@ def exec_wrapper_write_traceback(e,exit_val): if 'SystemExit' in exc_line: tb_lines.pop() - sys.stdout.write('{}\n{}\n'.format( c.yellow( '\n'.join(tb_lines) ), c.red(exc_line) )) + if os.getenv('EXEC_WRAPPER_EXIT_OK'): + sys.stdout.write(c.red(exc_line)) + else: + sys.stdout.write('{}\n{}\n'.format( + c.yellow('\n'.join(tb_lines)), + c.red(exc_line))) + print(c.blue('{} script exited with error').format( + 'Test' if os.path.dirname(sys.argv[0]) == 'test' else 'Spawned' )) with open('test.err','w') as fp: fp.write('\n'.join(tb_lines + [exc_line])) - print(c.blue('{} script exited with error').format( - 'Test' if os.path.dirname(sys.argv[0]) == 'test' else 'Spawned' )) - else: sys.stdout.write( c.purple((f'NONZERO_EXIT[{exit_val}]: ' if exit_val else '') + exc_line) + '\n' ) diff --git a/test/cmdtest_py_d/ct_misc.py b/test/cmdtest_py_d/ct_misc.py index 20d900d4..c1bfe60f 100755 --- a/test/cmdtest_py_d/ct_misc.py +++ b/test/cmdtest_py_d/ct_misc.py @@ -169,7 +169,6 @@ class CmdTestHelp(CmdTestBase): def usage(self): t = self.spawn('mmgen-walletgen',['foo']) - t.expect('MMGenSystemExit(1)') t.expect('USAGE: mmgen-walletgen') t.req_exit_val = 1 return t diff --git a/test/tooltest2.py b/test/tooltest2.py index dd6d2782..36c4b665 100755 --- a/test/tooltest2.py +++ b/test/tooltest2.py @@ -100,9 +100,9 @@ def fork_cmd(cmd_name,args,opts,stdin_input): vmsg(cp.stderr.strip().decode()) if cp.returncode != 0: import re - m = re.search(b'tool command returned (None|False)',cp.stdout) + m = re.search(b'tool command returned (None|False)',cp.stderr) if m: - return { b'None': None, b'False': False }[m.group(1)] + return eval(m.group(1)) else: die(2,f'Spawned program exited with error: {cp.stderr}')