mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-21 00:19:42 +02:00
add exception handling for filenotfound or other subprocess.popen and json.dumps exceptions
This commit is contained in:
58
jc/cli.py
58
jc/cli.py
@ -491,20 +491,9 @@ def main():
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# try magic syntax first: e.g. jc -p ls -al
|
# parse magic syntax first: e.g. jc -p ls -al
|
||||||
magic_stdout, magic_stderr, magic_exit_code = None, None, 0
|
|
||||||
magic_options = []
|
magic_options = []
|
||||||
valid_command, run_command, magic_found_parser, magic_options = magic_parser(sys.argv)
|
valid_command, run_command, magic_found_parser, magic_options = magic_parser(sys.argv)
|
||||||
if valid_command:
|
|
||||||
magic_stdout, magic_stderr, magic_exit_code = run_user_command(run_command)
|
|
||||||
if magic_stderr:
|
|
||||||
print(magic_stderr[:-1], file=sys.stderr)
|
|
||||||
elif run_command is None:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
run_command_str = ' '.join(run_command)
|
|
||||||
jc.utils.error_message(f'parser not found for "{run_command_str}". Use "jc -h" for help.')
|
|
||||||
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))
|
|
||||||
|
|
||||||
# set colors
|
# set colors
|
||||||
jc_colors = os.getenv('JC_COLORS')
|
jc_colors = os.getenv('JC_COLORS')
|
||||||
@ -513,7 +502,7 @@ def main():
|
|||||||
options = []
|
options = []
|
||||||
options.extend(magic_options)
|
options.extend(magic_options)
|
||||||
|
|
||||||
# only find options if magic_parser did not find a command
|
# find options if magic_parser did not find a command
|
||||||
if not valid_command:
|
if not valid_command:
|
||||||
for opt in sys.argv:
|
for opt in sys.argv:
|
||||||
if opt.startswith('-') and not opt.startswith('--'):
|
if opt.startswith('-') and not opt.startswith('--'):
|
||||||
@ -529,6 +518,9 @@ def main():
|
|||||||
raw = 'r' in options
|
raw = 'r' in options
|
||||||
version_info = 'v' in options
|
version_info = 'v' in options
|
||||||
|
|
||||||
|
if verbose_debug:
|
||||||
|
jc.tracebackplus.enable(context=11)
|
||||||
|
|
||||||
if not pygments_installed:
|
if not pygments_installed:
|
||||||
mono = True
|
mono = True
|
||||||
|
|
||||||
@ -544,8 +536,36 @@ def main():
|
|||||||
print(versiontext())
|
print(versiontext())
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
if verbose_debug:
|
# if magic syntax used, try to run the command and error if it's not found, etc.
|
||||||
jc.tracebackplus.enable(context=11)
|
magic_stdout, magic_stderr, magic_exit_code = None, None, 0
|
||||||
|
run_command_str = ' '.join(run_command)
|
||||||
|
|
||||||
|
if valid_command:
|
||||||
|
try:
|
||||||
|
magic_stdout, magic_stderr, magic_exit_code = run_user_command(run_command)
|
||||||
|
if magic_stderr:
|
||||||
|
print(magic_stderr[:-1], file=sys.stderr)
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
if debug:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
jc.utils.error_message(f'"{run_command_str}" command could not be found. For details use the -d or -dd option.')
|
||||||
|
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
if debug:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
jc.utils.error_message(f'"{run_command_str}" command could not be run. For details use the -d or -dd option.')
|
||||||
|
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))
|
||||||
|
|
||||||
|
elif run_command is None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
else:
|
||||||
|
jc.utils.error_message(f'parser not found for "{run_command_str}". Use "jc -h" for help.')
|
||||||
|
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))
|
||||||
|
|
||||||
if sys.stdin.isatty() and magic_stdout is None:
|
if sys.stdin.isatty() and magic_stdout is None:
|
||||||
jc.utils.error_message('Missing piped data. Use "jc -h" for help.')
|
jc.utils.error_message('Missing piped data. Use "jc -h" for help.')
|
||||||
@ -587,9 +607,17 @@ def main():
|
|||||||
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))
|
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))
|
||||||
|
|
||||||
# output the json
|
# output the json
|
||||||
|
try:
|
||||||
print(json_out(result, pretty=pretty, env_colors=jc_colors, mono=mono, piped_out=piped_output()))
|
print(json_out(result, pretty=pretty, env_colors=jc_colors, mono=mono, piped_out=piped_output()))
|
||||||
sys.exit(combined_exit_code(magic_exit_code, 0))
|
sys.exit(combined_exit_code(magic_exit_code, 0))
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
if debug:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
jc.utils.error_message('There was an issue generating the JSON output. For details use the -d or -dd option.')
|
||||||
|
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
Reference in New Issue
Block a user