我试图在一个命令行中使用argparse禁用相同的参数出现
./python3 --argument1=something --argument2 --argument1=something_else
Run Code Online (Sandbox Code Playgroud)
这意味着这应该引发一个错误,因为argument1的值被覆盖,默认情况下,argparse只是覆盖了值并且继续没有发生任何事情......有什么聪明的方法如何禁用这种行为?
能够使用choices=servers下面的方法来验证列表项是很好的。
servers = [ "ApaServer", "BananServer", "GulServer", "SolServer", "RymdServer", "SkeppServer", "HavsServer", "SovServer" ]
parser = argparse.ArgumentParser()
parser.add_argument('-o', '--only', nargs='*', choices=servers, help='Space separated list of case sensitive server names to process')
Run Code Online (Sandbox Code Playgroud)
是否可以强制列表中的项目是唯一的,从而不允许重复?
当多次指定相同的参数时,默认的 argparse 行为是最后指定的值“获胜”,覆盖先前的值。我希望 argparse 在多次指定同一参数时显示错误,而不是默默地覆盖第一个指定的值。
那怎么办呢?
我当前的代码:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'-t', '--test', # either of this switches
type=str, # parameter is string
dest='test', # store in 'test'.
required=True # required
)
Run Code Online (Sandbox Code Playgroud)
调用脚本:
myscript.py -t hello -t world
Run Code Online (Sandbox Code Playgroud)
没有错误,test才有价值世界。我希望 argparse 在这种情况下显示错误,因为从我的角度来看,默认行为很容易出错。