我有一个使用此结构的现有脚本
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()
吗?
答案 0 :(得分:4)
不要改变sys.argv
。 parse_args
默认采用sys.argv[1:]
,但如果你想允许从另一个python模块调用main
,你可以传递其他参数。
def main(args):
import argparse
...
args = cmd_parser.parse_args(args)
main(["-d","-f"])