如何“劫持”并修改命令行参数

时间:2014-12-17 15:34:02

标签: python

我正在开发一个脚本,它应该作为另一个脚本的(非常薄的)包装器。 e.g。

./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. 如何使用一组经过修改的参数调用其他脚本?

1 个答案:

答案 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 projecttests中使用了类似的结构。