Fix incorrect SIGPIPE handling

This commit is contained in:
Tim Van Baak 2022-12-28 12:18:10 -08:00
parent 7528c2465f
commit a5d5be3462
1 changed files with 13 additions and 9 deletions

View File

@ -236,12 +236,13 @@ def command_help(args):
return 0
def nocommand(args):
print("command required")
return 0
def main():
"""CLI entry point"""
# Enable piping
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE, SIG_DFL)
# Collect the commands from this module
import inquisitor.cli
commands = {
@ -283,8 +284,11 @@ def main():
add_logging_handler(verbose=args.verbose, log_filename=None)
# Execute command
if args.command:
sys.exit(commands[args.command](args.args))
else:
print("command required")
sys.exit(0)
try:
command = commands.get(args.command, nocommand)
sys.exit(command(args.args))
except BrokenPipeError:
# See https://docs.python.org/3.10/library/signal.html#note-on-sigpipe
devnull = os.open(os.devnull, os.O_WRONLY)
os.dup2(devnull, sys.stdout.fileno())
sys.exit(1)