Geo*_*res 2 python arguments argument-passing command-line-arguments
我想创建一个可选参数,它将是'-- '(双破折号和空格)并将其后的所有内容作为其值.问题是之后可能会出现一些其他可选参数'-- '.我不希望这些被解析为可选参数,而是作为值的值'-- '.例如:
python prog1 --foo 1 --bar 2
Run Code Online (Sandbox Code Playgroud)
这里foo和bar是分别是值1和值的可选参数2
python prog1 --foo 1 --bar 2 -- --foo 4 --bar 14
Run Code Online (Sandbox Code Playgroud)
在这里我希望foo并且bar之前'-- '被解析为可选参数.但是我希望'--foo 4 --bar 14'将其解析为可选参数的值'-- '.我想这样做没有重命名而来后的参数'-- ',以foo2和bar2,如果可能的话.
这可能吗?这怎么可能实现?
argparse已经支持--作为期末终止者.唯一的区别是默认处理单独处理以下参数.假设prog1看起来像
import argparse
p = argparse.ArgumentParser()
p.add_argument('--foo')
p.add_argument('--bar')
p.add_argument('remaining', nargs=argparse.REMAINDER)
print p.parse_args()
Run Code Online (Sandbox Code Playgroud)
然后命令
% python prog1 --foo 1 --bar 2 -- --foo 4 --bar 14
Run Code Online (Sandbox Code Playgroud)
产生
Namespace(bar='2', foo='1', remaining=['--', '--foo', '4', '--bar', '14'])
Run Code Online (Sandbox Code Playgroud)
(而不是Namespace(..., remaining='-- --foo 4 --bar 14')).如果需要,可以通过快速后处理步骤进行修复:
args = p.parse_args()
args.remaining = " ".join(args.remaining)
print args
Run Code Online (Sandbox Code Playgroud)
然后结果是
Namespace(bar='2', foo='1', remaining='-- --foo 4 --bar 14')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |