Search code examples
pythonstringoverridingargparse

How to use argparse library to parse a given string instead of app_args?


I have tried to run below code:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--target", required=True)
parsed_args, _ = parser.parse_known_args(args = ["--target foobar"])
print(parsed_args.target)

but I get error saying that following arguments are required: --target. I haven't passed any arguments when running python script, I want to just pass a string to the parser during runtime but it seems to still expect arguments when running the file.


Solution

  • import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("--target", required=True)
    parsed_args, _ = parser.parse_known_args(args = ["--target","foobar"]) # this array is the only change to your code
    print(parsed_args.target)
    

    and in repr things look like this;

    >>> import argparse
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument("--target", required=True)
    _StoreAction(option_strings=['--target'], dest='target', nargs=None, const=None, default=None, type=None, choices=None, required=True, help=None, metavar=None)
    >>> parsed_args, _ = parser.parse_known_args(args = ["--target","foobar"])
    >>> print(parsed_args.target)
    foobar
    >>>
    

    So dunno where you are getting your ValueError exception.