I\'ve been all over the documentation and it seems like there\'s no way to do it, but:
Is there a way to use argparse with any list of strings, instead of only with
Just change the script to default to sys.argv[1:]
and parse arguments omitting the first one (which is the name of the invoked command)
import argparse,sys
def main(argv=sys.argv[1:]):
parser = argparse.ArgumentParser()
# Do some argument parsing
args = parser.parse_args(argv)
if __name__ == '__main__':
main()
Or, if you cannot omit the first argument:
import argparse,sys
def main(args=None):
# if None passed, uses sys.argv[1:], else use custom args
parser = argparse.ArgumentParser()
parser.add_argument("--level", type=int)
args = parser.parse_args(args)
# Do some argument parsing
if __name__ == '__main__':
main()
Last one: if you cannot change the called program, you can still do something
Let's suppose the program you cannot change is called argtest.py
(I added a call to print arguments)
Then just change the local argv
value of the argtest.sys
module:
import argtest
argtest.sys.argv=["dummy","foo","bar"]
argtest.main()
output:
['dummy', 'foo', 'bar']
You can pass a list of strings to parse_args
:
parser.parse_args(['--foo', 'FOO'])