0
我想知道是否可以根据是否给定值来更改参数的行为。[Python argparse]将参数的行为设置为交互式(如果未给出值)
通常,我想提供一种交互方式来输入密码。
示例用法:
$ script.py =>使用默认参数值的参数 'P'
$ script.py -p为mypass =>使用 '为mypass' 作为'值p”
$ script.py -p =>获取密码交互
我想知道是否可以根据是否给定值来更改参数的行为。[Python argparse]将参数的行为设置为交互式(如果未给出值)
通常,我想提供一种交互方式来输入密码。
示例用法:
$ script.py =>使用默认参数值的参数 'P'
$ script.py -p为mypass =>使用 '为mypass' 作为'值p”
$ script.py -p =>获取密码交互
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的值,并获取密码交互
一个简单的类:
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()
哪里AskUser从何而来? – user12711 2017-07-07 00:26:30