Python CLI - 对所有用户问题回答“是”

时间:2015-04-07 20:08:24

标签: python command-line-interface

我正在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并直接删除该文件。我不确定如何执行此操作。任何帮助将不胜感激

1 个答案:

答案 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)