如何"hijack"和修改命令行参数



我正在开发一个脚本,该脚本应该用作另一个脚本的(非常薄的(包装器。

./myprogram_wrapper.py -a -b varc -d vard

应该在内部进行一些处理,修改varcvard

并调用
./myprogram.py -a -b varc_modified -d vard_modified

一个重要的细节是一些参数(例如 -a-b ( 是可选的。

我正在努力解决的是:

  1. 如何获取命令行参数以获取初始命令行。使用 sys.argv 数组是最佳选择吗?或者argparse可以帮忙吗?
  2. 如何使用修改后的参数集调用其他脚本?

假设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的另一个优点是,单独测试脚本的不同功能元素也很容易。我在自己的项目和测试中使用了类似的结构。

最新更新