main.py, exec_wrapper.py: improve error output

This commit is contained in:
The MMGen Project 2024-02-22 12:48:14 +00:00
commit 79f1bac97f
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
4 changed files with 14 additions and 12 deletions

View file

@ -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:

View file

@ -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' )

View file

@ -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

View file

@ -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}')