Skip to content

Exit gracefully when output pipe is broken #312

@akhayyat

Description

@akhayyat

Consider an Attic command with long output, e.g. attic list <repo>::<archive> for an archive with many files.

When the output of such a command is piped to something like less, then you exit less without reaching the end of the output, you get the following backtrace:

$ attic list <repo>::<archive> | less  # and quit less immediately
Traceback (most recent call last):
  File ".../attic", line 3, in <module>
    main()
  File ".../attic/lib/python3.4/site-packages/attic/archiver.py", line 730, in main
    exit_code = archiver.run(sys.argv[1:])
  File ".../attic/lib/python3.4/site-packages/attic/archiver.py", line 720, in run
    return args.func(args)
  File ".../attic/lib/python3.4/site-packages/attic/archiver.py", line 298, in do_list
    remove_surrogates(item[b'path']), extra))
BrokenPipeError: [Errno 32] Broken pipe
Exception ignored in: <_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe

From the user's point-of-view, there should not be an error here. It'd be nice if this scenario is handled more gracefully.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions