gpt4 book ai didi

python-3.x - python argparse 如果选择了参数则需要另一个参数 =True

转载 作者:行者123 更新时间:2023-12-04 10:55:37 25 4
gpt4 key购买 nike

如果存在另一个特定的参数选择,是否有一种方法可以使一个参数为真,否则所需的参数为假?

例如下面的代码,如果参数 -act choice select 是 'copy' 那么参数 dp required 是 true 否则 required 是 false:

import argparse

ap = argparse.ArgumentParser()

ap.add_argument("-act", "--act", required=True, choices=['tidy','copy'],type=str.lower,
help="Action Type")

ap.add_argument("-sp", "--sp", required=True,
help="Source Path")

args = vars(ap.parse_args())

if args["act"] == 'copy':
ap.add_argument("-dp", "--dp", required=True,
help="Destination Path")
else:
ap.add_argument("-dp", "--dp", required=False,
help="Destination Path")

args = vars(ap.parse_args())

### Tidy Function
def tidy():
print("tidy Function")

### Copy Function
def copy():
print("copy Function")


### Call Functions

if args["act"] == 'tidy':
tidy()
if args["act"] == 'copy':
copy()

我目前收到错误无法识别的参数:-dp 和上面的代码。

预期的结果是继续调用函数。谢谢

最佳答案

我会使用 ArgumentParser.add_subparsers定义操作类型 {tidy, copy} 并为命令提供特定参数。使用 base parser with parents允许您定义由两个(或所有)子命令共享的参数。

import argparse


parser = argparse.ArgumentParser(
prog='PROG',
epilog="See '<command> --help' to read about a specific sub-command."
)

base_parser = argparse.ArgumentParser(add_help=False)
base_parser.add_argument("--sp", required=True, help="source")

subparsers = parser.add_subparsers(dest='act', help='Sub-commands')

A_parser = subparsers.add_parser('copy', help='copy command', parents=[base_parser])
A_parser.add_argument('--dp', required=True, help="dest, required")

B_parser = subparsers.add_parser('tidy', help='tidy command', parents=[base_parser])
B_parser.add_argument('--dp', required=False, help="dest, optional")

args = parser.parse_args()

if args.act == 'copy':
pass
elif args.act == 'tidy':
pass

print(args)

它会生成以下帮助页面,请注意,不需要使用 -act 命令,而是作为位置参数给出。

~ python args.py -h
usage: PROG [-h] {tidy,copy} ...

positional arguments:
{tidy,copy} Sub-commands
tidy tidy command
copy copy command

optional arguments:
-h, --help show this help message and exit

See '<command> --help' to read about a specific sub-command.
~ python args.py copy -h
usage: PROG copy [-h] --sp SP [--dp DP]

optional arguments:
-h, --help show this help message and exit
--sp SP source
--dp DP dest, optional
~ python args.py tidy -h
usage: PROG tidy [-h] --sp SP --dp DP

optional arguments:
-h, --help show this help message and exit
--sp SP source
--dp DP dest, required

关于python-3.x - python argparse 如果选择了参数则需要另一个参数 =True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59221280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com