我正在python中编写CLI
。我不止一次要求用户确认。例如 - 如果调用delete
参数,我会在删除文件之前要求用户进行确认。但是我想添加另一个参数,如-y (yes)
,这样如果使用-y
,我不希望提示用户并继续删除他指定的文件。
我在这里发布相关代码:
def yes_no(userconfirmation):
"""
Converts string input and returns a boolean value.
"""
stdout.write('%s [y/n] : ' % userconfirmation)
while True:
try:
return strtobool( raw_input().lower() )
except ValueError:
stdout.write( 'Please respond with \'y\' or \'n\'.\n' )
#In the delete function:
if yes_no( 'Are you sure you want to delete {0}'.format( file_to_remove.split("/")[-1] ) ):
b.delete_key(file_to_remove)
当我致电python myprog.py -r file_to_remove.txt
时,如果提示Are you sure you want to delete file_to_delete.py [y/n]
。如果我按y
文件被删除,如果按下n
,文件删除将被中止。我希望能够使用python myprog.py -r file_to_remove.txt -y
来提醒用户y/n
并直接删除该文件。我不确定如何执行此操作。任何帮助将不胜感激
答案 0 :(得分:1)
您需要在argparser中使用解析操作store_true
。
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-y', action='store_true')
>>> parser.parse_args('-y'.split())
Namespace(y=True)
>>> parser.parse_args(''.split())
Namespace(y=False)
>>>
现在您可以检查y
的值,并决定是否需要询问用户提示。您应该使用比y
更具描述性的内容作为我认为的选项。例如--noprompt
。
>>> parser.add_argument('-n', '--noprompt', action='store_true')
>>> parser.parse_args(''.split())
Namespace(noprompt=False)
>>> parser.parse_args('--noprompt'.split())
Namespace(noprompt=True)
>>> parser.parse_args('-n'.split())
Namespace(noprompt=True)