使用argparse保持参数不变
我想用argparse这个工具来处理我知道的参数,然后把其他的参数不管。例如,我想运行
performance -o output other_script.py -a opt1 -b opt2
这个命令使用了-o
这个选项,其他的参数就不动。
模块profiler.py用optparse做了类似的事情,但因为我在用argparse,所以我这样做:
def parse_arguments():
parser = new_argument_parser('show the performance of the given run script')
parser.add_argument('-o', '--output', default='profiled.prof')
return parser.parse_known_args()
def main():
progname = sys.argv[1]
ns, other_args = parse_arguments()
sys.argv[:] = other_args
这样也能工作,但如果另一个脚本other_script.py也有一个-o
的选项,那会怎样呢?
总的来说,有没有更好的方法来解决这个问题呢?
2 个回答
20
你还可以给你的解析器添加一个位置参数,使用 nargs=argparse.REMAINDER
,这样可以捕捉到脚本及其选项:
# In script 'performance'...
p = argparse.ArgumentParser()
p.add_argument("-o")
p.add_argument("command", nargs=argparse.REMAINDER)
args = p.parse_args()
print args
运行上面的这个简单脚本...
$ performance -o output other_script.py -a opt1 -b opt2
Namespace(command=['performance', '-a', 'opt1', '-b', 'opt2'], o='output')
8
argparse
是一个用来处理命令行参数的工具,它会一直解析参数,直到遇到文件结束符(EOF)或者双短横线(--
)。如果你想要某些参数不被 argparse
处理,可以这样写:
python [PYTHONOPTS] yourfile.py [YOURFILEOPT] -- [ANYTHINGELSE]