我想使用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
标志会发生什么?
通常有更好的方法来解决这个问题吗?
答案 0 :(得分:15)
您还可以使用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')
答案 1 :(得分:9)
argparse
将停止解析参数直到EOF或--
。如果你想在没有被argparse解析的情况下获得参数,你可以编写::
python [PYTHONOPTS] yourfile.py [YOURFILEOPT] -- [ANYTHINGELSE]