有没有办法让 Argparse 参数暗示多个其他选项?

问题描述 投票:0回答:1

我有两个选项,可以采用不同的参数。我想要一个特殊的选项,意思是“两者都有特定的标准数据”。这将是与不带参数的操作不同的模式。

    parser.add_argument('--use-std-date', '-U', action='store_const',
                        const=nominal_test_fixture_day, dest='use_date')
    parser.add_argument('--use-date', '-u', action='store', type=parse_date,
                        metavar='%Y-%m-%d', dest='use_date', nargs=1)
    parser.add_argument('--write-out-data', '-w', action='store_true')
    parser.add_argument('-build-standerd-data', help="This option implies both '--use-std-date', and '--write-out-data'")

在我的梦想世界里,会有这样的东西:

parser.add_argument('--build-standerd-data', implies="-U -w")

如果解析器得到

--build-standerd-data
,它会将
"-U -w"
递归回
parse_args()
并将结果添加到返回值中。如果它同时获得
--build-standerd-data
--use-std-date
(忽略一个?引发错误?),它可能也会做一些聪明的事情。

是否存在这样的东西,或者我只需要在我的主函数中添加一堆 if-else 语句?

python argparse
1个回答
0
投票

要实现所需的行为,您可以通过在解析参数后检查

--build-standard-data
选项是否存在来手动实现它。如果提供,请将
use_date
设置为“nominal_test_fixture_day”并将
write_out_data
设置为 True。

这是一个示例代码片段:

import argparse

parser = argparse.ArgumentParser()

# Add your arguments here
parser.add_argument('--use-std-date', '-U', action='store_const',
                    const='nominal_test_fixture_day', dest='use_date')
parser.add_argument('--use-date', '-u', action='store', type=str,
                    metavar='%Y-%m-%d', dest='use_date', nargs=1)
parser.add_argument('--write-out-data', '-w', action='store_true')
parser.add_argument('--build-standard-data', action='store_true',
                    help="This option implies both '--use-std-date' and '--write-out-data'")

args = parser.parse_args()

# Check if --build-standard-data is provided
if args.build_standard_data:
    args.use_date = 'nominal_test_fixture_day'
    args.write_out_data = True

# Now you can use args.use_date and args.write_out_data in your code
print(f"use_date: {args.use_date}")
print(f"write_out_data: {args.write_out_data}")

这样,如果提供了

--build-standard-data
,它会将
use_date
设置为 'nominal_test_fixture_day' 并将
write_out_data
设置为 True。

© www.soinside.com 2019 - 2024. All rights reserved.