我想知道是否可以根据是否给出值来改变参数的行为。
通常,我想提供一种输入密码的交互方式。
示例用法:
$ script.py =>使用参数'p'的默认参数值
$ script.py -p mypass =>使用'mypass'作为'p'的值
$ script.py -p =>以交互方式获取密码
答案 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()