scruel tao wrote:
If we have the following code:
```
parser = argparse.ArgumentParser(description="test")
parser.add_argument('path')
```

Run it without args, will get error message:
```
usage: test.py [-h] path
test.py: error: the following arguments are required: path
```

However, I hope the message can be as the following:
```
usage: test.py [-h] <path>
test.py: error: the following arguments are required: path
```

The `metavar` argument to `add_argument` can be used to control how an argument is represented in the usage text:
```
import argparse
parser = argparse.ArgumentParser(description='test')
parser.add_argument('path', metavar='<path>')
parser.parse_args()
```

Which results in:
```
usage: test.py [-h] <path>
test.py: error: the following arguments are required: <path>
```

Or might can consider to provide a way to let user have there own style, like:
```
usage: test.py [-h] path
```

It's also possible to create a custom help formatter, overriding appropriate methods to control the formatting. For example:
```
import argparse

class CustomHelpFormatter(argparse.HelpFormatter):
    def _get_default_metavar_for_positional(self, action):
        default = super()._get_default_metavar_for_positional(action)
        return f'<{default}>'

parser = argparse.ArgumentParser(
    description='test',
    formatter_class=CustomHelpFormatter)
parser.add_argument('path')
parser.parse_args()
```

Which results in:
```
usage: test.py [-h] <path>
test.py: error: the following arguments are required: path
```

That's a bit closer to what you asked for, since the required argument shown in the error message doesn't include the angle brackets. It also avoids needing to specify a `metavar` for every positional argument. However, it is overriding a non-public method of the `HelpFormatter` class, so might not work across all Python versions if the name or signature of that method changes (even if it does work with all current versions, it might break in future).

--
Mark.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to