有没有办法在 Python 上使用 argparse 添加一个参数来抑制对其他参数的需求?
Is there a way to add a parameter that supress the need of other parameters using argparse on Python?
我在 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,可以在没有定义任何其他位置参数的情况下调用它。可能吗?
不,没有这样的方法。
您可以将所有参数设为可选并将默认值设置为 None
然后执行检查以确保所有参数都不 None
否则如果 manageAdam
则提高 argparse.ArgumentError
提供了对其他参数的跳过检查。
没有执行此操作的内置方法。您 可能 可以通过编写一些自定义 Action
类 来跟踪解析器的状态,但我相信它会变得非常混乱并且越野车。
我认为最好的办法就是简单地提高您的 UI。 -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...>
我在 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,可以在没有定义任何其他位置参数的情况下调用它。可能吗?
不,没有这样的方法。
您可以将所有参数设为可选并将默认值设置为 None
然后执行检查以确保所有参数都不 None
否则如果 manageAdam
则提高 argparse.ArgumentError
提供了对其他参数的跳过检查。
没有执行此操作的内置方法。您 可能 可以通过编写一些自定义 Action
类 来跟踪解析器的状态,但我相信它会变得非常混乱并且越野车。
我认为最好的办法就是简单地提高您的 UI。 -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...>