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