Search code examples
pythonpython-3.xargparse

How to preserve newlines in argparse version output while letting argparse auto-format/wrap the remaining help message?


I wrote the following code.

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-v', '--version', action='version',
                    version='%(prog)s 1.0\nCopyright (c) 2016 Lone Learner')
parser.parse_args()

This produces the following output.

$ python foo.py --version
foo.py 1.0 Copyright (c) 2016 Lone Learner

You can see that the newline is lost. I wanted the copyright notice to appear on the next line.

How can I preserve the new lines in the version output message?

I still want argparse to compute how the output of python foo.py -h should be laid out with all the auto-wrapping it does. But I want the version output to be a multiline output with the newlines intact.


Solution

  • RawTextHelpFormatter will turn off the automatic wrapping, allowing your explicit \n to appear. But it will affect all the help lines. There's no way of picking and choosing. Either accept the default wrapping, or put explicit newlines in all of your help lines.

    You are getting to a level of pickiness about the help format that you need to study the HelpFormatter code for yourself.