Sha*_*odi 19 python command-line parsing argparse
我想使用argparse来解析形式为"arg = val"的命令行.例如,用法是:
script.py conf_dir=/tmp/good_conf
Run Code Online (Sandbox Code Playgroud)
要实现它,我这样做:
desc = "details"
parser = argparse.ArgumentParser(description=desc, add_help=False)
args = parser.add_argument("conf_dir")
args = parser.parse_args("conf_dir=FOO".split())
args = parser.parse_args()
print args.conf_dir
Run Code Online (Sandbox Code Playgroud)
但是,问题在于,在调用脚本时:
python script.py conf_dir=/tmp/good_conf
Run Code Online (Sandbox Code Playgroud)
我明白了:
conf_dir=/tmp/good_conf
Run Code Online (Sandbox Code Playgroud)
我期待的地方
/tmp/good_conf
Run Code Online (Sandbox Code Playgroud)
所以,问题是:我可以使用argparse来解析包含名称值对的cmd行吗?任何提示?
编辑:我想这样做的原因而不是像--conf_dir =/tmp/good_dir这样的东西是因为还有其他工具(用其他语言编写),它使用conf_dir =/tmp/good_dir样式的参数.为了保持一致性,我是以这种方式解析args.
che*_*ner 26
您需要自定义操作
class StoreNameValuePair(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
n, v = values.split('=')
setattr(namespace, n, v)
args = parser.add_argument("conf_dir", action=StoreNameValuePair)
Run Code Online (Sandbox Code Playgroud)
根据文档,argparse本身不会让你有这样的无前缀选项.如果省略前导-,则假定您正在描述位置参数,并期望将其提供为:
python script.py /tmp/good_conf
Run Code Online (Sandbox Code Playgroud)
如果您希望它是可选的,则需要通过调用它将其正确标记为标志--conf_dir,并调用以下脚本:
python script.py --conf_dir=/tmp/good_conf
Run Code Online (Sandbox Code Playgroud)
但是,要接受名称 - 值对,您可以实现自定义操作.结合使用nargs,这样的动作可以接受任意数量的名称 - 值对并将它们存储在参数解析结果对象上.
| 归档时间: |
|
| 查看次数: |
9184 次 |
| 最近记录: |