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



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

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()
if __name__ == '__main__':
    main()

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

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

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

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

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

def main(args):
    import argparse
    ...
    args = cmd_parser.parse_args(args)
main(["-d","-f"])