python - 只有一个带 argparse 的命令行参数

标签 python argparse

我正在尝试使用 argparse 以一种只接受 none 或 once 的方式实现命令行参数。应拒绝多次出现。

我使用下面的代码

#!/usr/bin/env python3
import argparse
cmd_parser = argparse.ArgumentParser()
cmd_parser.add_argument('-o', dest='outfile')
cmd_line = cmd_parser.parse_args()
print(cmd_line.outfile)

一个参数给出了预期的结果:

./test.py -o file1
file1

当两次发出参数时,第一次出现的会被忽略:

./test.py -o file1 -o file2
file2

我还尝试了 nargs=1action='store' 没有达到预期的结果。

我如何告诉 argparse 拒绝出现多个参数?

最佳答案

它可以用一个自定义的 Action 来安排:

import argparse

class Once(argparse.Action):
    def __init__(self, *args, **kwargs):
        super(Once, self).__init__(*args, **kwargs)
        self._count = 0

    def __call__(self, parser, namespace, values, option_string=None):
        # print('{n} {v} {o}'.format(n=namespace, v=values, o=option_string))
        if self._count != 0:
            msg = '{o} can only be specified once'.format(o=option_string)
            raise argparse.ArgumentError(None, msg)
        self._count = 1
        setattr(namespace, self.dest, values)

cmd_parser = argparse.ArgumentParser()
cmd_parser.add_argument('-o', dest='outfile', action=Once, default='/tmp/out')
cmd_line = cmd_parser.parse_args()
print(cmd_line.outfile)

您可以指定一个默认值:

% script.py 
/tmp/out

您可以指定一次-o:

% script.py -o file1 
file1

但是指定 -o 两次会引发错误:

% script.py -o file1 -o file2
usage: script.py [-h] [-o OUTFILE]
script.py: error: -o can only be specified once

关于python - 只有一个带 argparse 的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14915986/

相关文章:

python - 调整 x_axis_label 或 y_axis_label 字体/字体大小( Bokeh )

python - 更新 Tensorboard,同时使用 conda 保持 Tensorflow 旧版

python - argparse 参数可以是 str 或 int 以及处理它的最简单方法

python - 如何使用 argparse 解析带有前导减号(负数)的位置参数

python - 我更改了标量类型 float 的预期对象,但在 Pytorch 中仍然得到 Long

Python正则表达式编译2.7.5

python - 属性错误: module 'pandas' has no attribute 'np' - Cufflinks spread graph

python - 分发 Python 库(单个文件)

python - 命令帮助(通过 -h) 其中 `argparse` 是范围检查输入端口号

python - Jupyter Notebook 中的 Argparse 引发 TypeError