我在python上使用Argparse在命令行上执行脚本。我有这个用于我的剧本:
parser = argparse.ArgumentParser(prog = 'manageAdam')
parser.add_argument("-s", action='store_true', default=False, help='Shows configuration file')
parser.add_argument("d", type=str, help="device")
parser.add_argument("o", type=str, help="operation")
parser.add_argument("-v", "--value", type=int, nargs='*', help="value or list to send in the operation")
我认为如果我调用manageAdam -s它会工作并且不要求位置参数,比如-h,可以在没有任何其他定义的位置参数的情况下调用它。有可能吗?
答案 0 :(得分:1)
没有内置方法可以做到这一点。 可能能够通过编写一些自定义Action
类来实现某些功能,这些类可以跟踪解析器的状态,但我相信它会变得非常混乱和错误。
我认为最好的办法是简单地改善你的用户界面。 -s
不是一个选项。它是一个单独的命令,可以完全改变脚本的执行方式。在这种情况下,您应该使用允许引入子命令的subparsers
功能。这是一个比你想象的更好的界面,并被许多其他工具(例如Git / mercurial)使用。
在这种情况下,您可以使用config
命令来处理配置,并使用run
(或您希望如何调用它)命令来执行设备上的操作:
subparsers = parser.add_subparsers(dest='command')
parser_config = subparsers.add_parser('config', help='Configuration')
parser_run = subparsers.add_parser('run', help='Execute operation on device')
parser_run.add_argument('d', type=str, ...)
parser_run.add_argument('o', type=str, ...)
parser_run.add_argument('-v', type=int, nargs='*', ...)
# later:
args = parser.parse_args()
if args.command == 'config':
print('Configuration')
else:
print('Run operation')
从命令行使用:
$ manageAdam config
# or
$ manageAdam run <device> <operation> <values...>
答案 1 :(得分:0)
不,没有这样的方式。
您可以将所有参数设为可选,并将默认值设置为None
,然后检查所有参数是否None
否则argparse.ArgumentError
,如果manageAdam
提供了对其他参数的跳过检查。