Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何";劫持“;和修改命令行参数_Python - Fatal编程技术网

Python 如何";劫持“;和修改命令行参数

Python 如何";劫持“;和修改命令行参数,python,Python,我正在编写一个脚本,它应该作为另一个脚本的(非常薄的)包装器。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帮助 如何使用

我正在编写一个脚本,它应该作为另一个脚本的(非常薄的)包装器。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
    帮助
  • 如何使用一组修改过的参数调用另一个脚本

  • 假设
    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\u 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
    的另一个优点是,还可以轻松地分别测试脚本的不同功能元素。我在和中使用了类似的结构。

    myprogram.py的入口点是什么?如果它的结构使您可以调用
    main(args)
    ,那么您可以在
    myprogram\u包装器中导入myprogram.py
    ,并使用解析的、更新的参数调用它。@jornsharpe我想是的。经过一段时间的参数处理后,使用argparse.ArgumentParser我们有:#如果name==“main”:main(sys.argv)调用main,因此原则上您建议的方法可以工作。你能举个简单的例子吗?这里的新手:)这并不是很容易,因为看起来参数解析被卷到了
    main
    。您可以控制包装的脚本吗?好的,只需检查两个细节:-查看示例,
    code
    myprogram\u wrapper.py上不应该有任何main或parse_args函数,否则会发生名称冲突,对吗?是的,除非您
    导入myprogram
    并通过例如
    myprogram.parse_args