56

I am using argparse to parse command line arguments.

To aid debugging, I would like to print a line with the arguments which with the Python script was called. Is there a simple way to do this within argparse?

3 Answers 3

55

ArgumentParser.parse_args by default takes the arguments simply from sys.argv. So if you don’t change that behavior (by passing in something else to parse_args), you can simply print sys.argv to get all arguments passed to the Python script:

import sys
print(sys.argv)

Alternatively, you could also just print the namespace that parse_args returns; that way you get all values in the way the argument parser interpreted them:

args = parser.parse_args()
print(args)
Sign up to request clarification or add additional context in comments.

1 Comment

This does not works if parser.parse_args() require mandatory arguments. Is there an alternative in this case ?
31

If running argparse within another python script (e.g. inside unittest), then printing sys.argv will only print the arguments of the main script, e.g.:

['C:\eclipse\plugins\org.python.pydev_5.9.2.201708151115\pysrc\runfiles.py', 'C:\eclipse_workspace\test_file_search.py', '--port', '58454', '--verbosity', '0']

In this case you should use vars to iterate over argparse args:

parser = argparse.ArgumentParser(...
...
args = parser.parse_args()
for arg in vars(args):
    print arg, getattr(args, arg)

Thanks to: https://stackoverflow.com/a/27181165/658497

1 Comment

I would use a print call like the following print(' {} {}'.format(arg, getattr(args, arg) or '')) with getattr(args, arg) or '' being the essential difference to your version to prevent the word 'None' from being printed in case of unused optional parameters.
19

You can get the arguments as a dict by calling vars(args) Then you can iterate over the key-value pairs of the dict

args = parser.parse_args()
print(' '.join(f'{k}={v}' for k, v in vars(args).items()))

1 Comment

vars can be replace by __dict__. for k, v in args.__dict__.items():print(f"{k}: {v}") `

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.