我正在python中实现一个小命令行工具,需要向用户询问几个问题。我用
raw_input('Are you male or female?')
一直以来。现在我希望能够处理愚蠢的用户(或者那些懒得阅读/记住文档的人),所以我需要检查答案是否有意义。
gender = ''
while gender not in ['male', 'female']:
gender = raw_input('Are you male or female?')
我想知道是否存在类似argparse的东西可以自动解决这个问题,比如
import inputparse
gender = inputparse.get_input(prompt='Are you male or female?', type=str, possible_input=['male', 'female'])
并会照顾自动检查等。
答案 0 :(得分:3)
从接受的this question回答:cmd
图书馆可能对你感兴趣。
" Cmd类为编写面向行的命令解释器提供了一个简单的框架。"
This Python Module of the Week page以它为特色,它有一些例子和解释。
答案 1 :(得分:2)
这个问题已经很老了,但是我今天正在研究。库pyinputplus是Al Swigert在 Automate the Boring Stuff With Python
中推荐的答案 2 :(得分:1)
我不知道这样的库是否存在,但你可以编写一个这样的高阶函数:
def check_input(predicate, msg, error_string="Illegal Input"):
while True:
result = input(msg).strip()
if predicate(result):
return result
print(error_string)
result = check_input(lambda x: x in ['male', 'female'],
'Are you male or female? ')
print(result)
输出:
Are you male or female? foo Illegal Input Are you male or female? bar Illegal Input Are you male or female? Male Illegal Input Are you male or female? male male
答案 3 :(得分:1)
我在这个线程中偶然发现了一个类似的库,我很失望没有一个,所以我写了一个。我将在接下来的日子里为此做很多工作,因为我需要更多的功能来处理我正在写的内容。
答案 4 :(得分:1)
再次消毒...
如果您需要一个简单的帮助库来解决问题,请查看click。它的主要关注点是命令行选项,但我认为它非常适合您的用例。