python - 在将脚本作为函数调用时模拟sys.argv而不修改它

时间:2017-10-30 17:35:34

标签: python

我有一个使用此结构的现有脚本

if __name__ == '__main__':
    main()

def main():
    import argparse
    cmd_parser = argparse.ArgumentParser(description='A tool to work with MicroPython .mpy files.')
    cmd_parser.add_argument('-d', '--dump', action='store_true',
        help='dump contents of files')
    cmd_parser.add_argument('-f', '--freeze', action='store_true',
        help='freeze files')
    cmd_parser.add_argument('-q', '--qstr-header',
        help='qstr header file to freeze against')
    cmd_parser.add_argument('-mlongint-impl', choices=['none', 'longlong', 'mpz'], default='mpz',
        help='long-int implementation used by target (default mpz)')
    cmd_parser.add_argument('-mmpz-dig-size', metavar='N', type=int, default=16,
        help='mpz digit size used by target (default 16)')
    cmd_parser.add_argument('files', nargs='+',
        help='input .mpy files')
    args = cmd_parser.parse_args()
    ...

通常情况下,我一直在通过命令行调用它,但我计划import这个脚本并调用它:theScript.main()

问题是(我不认为)sys.argv将是这个功能所期望的; sys.argv将设置为调用脚本的值。

QESTION
什么是模仿我从另一个脚本调用theScript的最Pythonic方法,但好像是从命令行调用它?

我应该在致电sys.argv之前手动修改theScript.main()吗?

1 个答案:

答案 0 :(得分:4)

不要改变sys.argvparse_args默认采用sys.argv[1:],但如果你想允许从另一个python模块调用main,你可以传递其他参数。

def main(args):
    import argparse
    ...
    args = cmd_parser.parse_args(args)

main(["-d","-f"])