如果没有给出值,[Python argparse]将参数的行为设置为交互式

时间:2015-02-09 14:24:18

标签: python default-value argparse interactive

我想知道是否可以根据是否给出值来改变参数的行为。

通常,我想提供一种输入密码的交互方式。

示例用法:

  

$ script.py =>使用参数'p'的默认参数值

     

$ script.py -p mypass =>使用'mypass'作为'p'的值

     

$ script.py -p =>以交互方式获取密码

2 个答案:

答案 0 :(得分:2)

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-p", nargs='?', const="mypass", default="default")

args = parser.parse_args()

if args.p:
    print args.p

然后,您可以检查p的值并以交互方式获取密码

答案 1 :(得分:1)

一个简单的课程:

class AskUser:
    def __init__(self, type, func, *args, **kwargs):
        self.type = type
        self.func = func
        self.args = args
        self.kwargs = kwargs
    def __call__(self, value):
        if value == '':
            value = self.func(*self.args, **self.kwargs)
        return self.type(value)

你可以直接插入argparse:

parser = argparse.ArgumentParser()
parser.add_argument('user', nargs='?', type=AskUser(str, input, 'Enter user name: '), default='')
parser.add_argument('file', nargs='?', type=AskUser(Path, filedialog.asksaveasfilename,
    title='Select a file', filetypes=(('CSV files', '*.csv'),), defaultextension='.csv'), default='')
args = parser.parse_args()