Package: failprint
failprintRun a command, print its output only if it fails.Tired of searching thequietoptions of your programs
to lighten up the output of yourmake checkormake lintcommands?Tired of finding out that standard output and error are mixed up in some of them?Simply run your command throughfailprint.
If it succeeds, nothing is printed.
If it fails, standard error is printed.
Plus other configuration goodies :wink:ExampleYou don't want to see output when the command succeeds.The task runnerdutyusesfailprint,
allowing you to define tasks in Python and run them with minimalist and beautiful output:Requirementsfailprint requires Python 3.8 or above.To install Python 3.8, I recommend usingpyenv.# install pyenvgitclonehttps://github.com/pyenv/pyenv~/.pyenv# setup pyenv (you should also put these three lines in .bashrc or similar)exportPATH="${HOME}/.pyenv/bin:${PATH}"exportPYENV_ROOT="${HOME}/.pyenv"eval"$(pyenvinit-)"# install Python 3.8.17pyenvinstall3.8.17# make it available globallypyenvglobalsystem3.8.17InstallationWithpip:pipinstallfailprintWithpipx:python3.8-mpipinstall--userpipx
pipxinstallfailprintUsage%poetryrunfailprint-husage: failprint [-h] [-c {stdout,stderr,both,none}] [-f {pretty,tap}] [-y | -Y] [-p | -P] [-q | -Q] [-s | -S] [-z | -Z] [-n NUMBER][-t TITLE]COMMAND [COMMAND ...]positional arguments:COMMANDoptional arguments:-h, --help            show this help message and exit-c {stdout,stderr,both,none}, --capture {stdout,stderr,both,none}Which output to capture. Colors are supported with 'both' only, unless the command has a 'force color'option.-f {pretty,tap}, --format {pretty,tap}Output format. Pass your own Jinja2 template as a string with '-f custom=TEMPLATE'. Available variables:command, title (command or title passed with -t), code (exit status), success (boolean), failure (boolean),number (command number passed with -n), output (command output), nofail (boolean), quiet (boolean), silent(boolean). Available filters: indent (textwrap.indent).-y, --pty             Enable the use of a pseudo-terminal. PTY doesn't allow programs to use standard input.-Y, --no-pty          Disable the use of a pseudo-terminal. PTY doesn't allow programs to use standard input.-p, --progress        Print progress while running a command.-P, --no-progress     Don't print progress while running a command.-q, --quiet           Don't print the command output, even if it failed.-Q, --no-quiet        Print the command output when it fails.-s, --silent          Don't print anything.-S, --no-silent       Print output as usual.-z, --zero, --nofail  Don't fail. Always return a success (0) exit code.-Z, --no-zero, --strictReturn the original exit code.-n NUMBER, --number NUMBERCommand number. Useful for the 'tap' format.-t TITLE, --title TITLECommand title. Default is the command itself.fromfailprint.runnersimportruncmd="echo hello"exit_code=run(cmd,# str, list of str, or Python callableargs=None,# args for callablekwargs=None,# kwargs for callablenumber=1,# command number, useful for tap formatcapture=None,# stdout, stderr, both, none, True or Falsetitle=None,# command titlefmt=None,# pretty, tap, or custom="MY_CUSTOM_FORMAT"pty=False,# use a PTYprogress=True,# print the "progress" template before running the commandnofail=False,# always return zeroquiet=False,# don't print output when the command failssilent=False,# don't print anything)