我正在开发一个脚本,该脚本应该用作另一个脚本的(非常薄的(包装器。
./myprogram_wrapper.py -a -b varc -d vard
应该在内部进行一些处理,修改varc
和vard
./myprogram.py -a -b varc_modified -d vard_modified
一个重要的细节是一些参数(例如 -a
和 -b
( 是可选的。
我正在努力解决的是:
- 如何获取命令行参数以获取初始命令行。使用
sys.argv
数组是最佳选择吗?或者argparse
可以帮忙吗? - 如何使用修改后的参数集调用其他脚本?
假设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
的另一个优点是,单独测试脚本的不同功能元素也很容易。我在自己的项目和测试中使用了类似的结构。