Python argparse:至少需要一个参数

2024-05-17 04:03:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在为一个Python程序使用argparse,这个程序可以-process-upload或者两者都可以:

parser = argparse.ArgumentParser(description='Log archiver arguments.')
parser.add_argument('-process', action='store_true')
parser.add_argument('-upload',  action='store_true')
args = parser.parse_args()

如果没有至少一个参数,程序就没有意义。如何配置argparse以强制至少选择一个参数?

更新:

以下是评论:什么是Pythonic的方法来参数化一个至少有一个选项的程序?


Tags: store程序logaddtrueparser参数argparse
3条回答
if not (args.process or args.upload):
    parser.error('No action requested, add -process or -upload')

如果不是“或两者”部分(我最初错过了这一部分),您可以使用如下内容:

parser = argparse.ArgumentParser(description='Log archiver arguments.')
parser.add_argument('--process', action='store_const', const='process', dest='mode')
parser.add_argument('--upload',  action='store_const', const='upload', dest='mode')
args = parser.parse_args()
if not args.mode:
    parser.error("One of --process or --upload must be given")

不过,也许使用subcommands代替它会更好。

args = vars(parser.parse_args())
if not any(args.values()):
    parser.error('No arguments provided.')

相关问题 更多 >