我有一个程序,其中包含大量潜在的参数。它基本上允许用户get/set/delete/list
非常小的数据库中的任何表。 每列都有一个可以传递的参数。
这不是主界面,只是一个偶尔有用的管理界面。
无论如何,如果用户想在表中插入一行,他必须知道所有列的名称。 虽然从帮助中很容易看出这一点 - 这也是一个痛苦的屁股。
因此,我更改了代码,以便用户可以传递 --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)