How to use python argparse with args other than sys.argv?

╄→尐↘猪︶ㄣ 提交于 2019-12-01 02:28:28

You can pass a list of strings to parse_args:

parser.parse_args(['--foo', 'FOO'])

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']    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!