如何在python中将交互式提示与argparse相结合?

如何在python中将交互式提示与argparse相结合?,python,argparse,Python,Argparse,我有一个包含大量潜在参数的程序。 它基本上允许用户在一个非常小的数据库中获取/设置/删除/列出任何表。每列都有一个可以传递的参数。 这不是主界面,只是偶尔有用的管理界面 无论如何,如果用户想在表中插入一行,他必须知道所有列的名称。虽然从帮助中很容易看出这一点,但这也是一件痛苦的事 因此,我更改了代码,以便用户可以传递--prompt选项,程序将提示他们输入与指定表关联的每个列名。但我的问题是,我现在需要在两个地方复制输入约束(选项、类型等)——argparse和这个提示函数 问题1:有没有更好

我有一个包含大量潜在参数的程序。 它基本上允许用户在一个非常小的数据库中获取/设置/删除/列出任何表。每列都有一个可以传递的参数。
这不是主界面,只是偶尔有用的管理界面

无论如何,如果用户想在表中插入一行,他必须知道所有列的名称。虽然从帮助中很容易看出这一点,但这也是一件痛苦的事

因此,我更改了代码,以便用户可以传递--prompt选项,程序将提示他们输入与指定表关联的每个列名。但我的问题是,我现在需要在两个地方复制输入约束(选项、类型等)——argparse和这个提示函数

  • 问题1:有没有更好的方法
  • 问题#2:是否有一种干净的方法来引用argparse约束
  • 问题#3:是否有任何库被推荐作为组合命令行参数、选项和提示的替代方案

谢谢

执行此操作的典型方法是使用自定义操作。您可以使用如下相同的函数验证argparse选项和输入

#!/usr/bin/env python3

import argparse


class ColumnsAction(argparse.Action):
    def __call__(self, parser, namespace, value, option_string=None):
        self.validate(parser, value)
        setattr(namespace, self.dest, value)

    @staticmethod
    def validate(parser, value):
        if value not in ('foo', 'bar'):
            parser.error('{} not valid column'.format(value))


parser = argparse.ArgumentParser()
parser.add_argument('--columns', action=ColumnsAction)
args = parser.parse_args()
if args.columns is None:
    args.columns = input('Enter columns: ')
    ColumnsAction.validate(parser, args.columns)
print(args.columns)