我正在开发一个脚本,它应该作为另一个脚本的(非常薄的)包装器。 e.g。
./myprogram_wrapper.py -a -b varc -d vard
应在内部执行一些修改varc
和vard
并调用
./myprogram.py -a -b varc_modified -d vard_modified
一个重要的细节是,某些参数(例如-a
和-b
)是可选的。
我挣扎的是:
sys.argv
数组是最佳选择吗?或者可以argparse
帮助吗?答案 0 :(得分:3)
假设myprogram.py
的结构类似于:
import argparse
import sys
def main(args):
"""Does all of the work."""
...
def parse_args(args):
"""Parses the arguments."""
...
return parsed_args
if __name__ == "__main__":
main(parse_args(sys.argv))
然后这变得非常容易,myprogram_wrapper.py
看起来像:
import sys
from myprogram import main, parse_args
def modify_args(args):
"""Modify the arguments."""
parsed_args = parse_args(args) # reuse the original parser
... # add your own changes
return modified_args
if __name__ == "__main__":
main(modify_args(sys.argv))
这样构造myprogram.py
的另一个好处是,它可以很容易地单独测试脚本的不同功能元素。我在my own project和tests中使用了类似的结构。