[Python argparse]如果没有给出值,则将参数的行为设置为交互式
我想知道是否有可能根据是否给定值来改变参数的行为 通常,我希望提供一种交互式方式来输入密码 示例用法: $script.py=>使用参数“p”的默认参数值 $script.py-p mypass=>使用“mypass”作为“p”的值 $script.py-p=>以交互方式获取密码 然后,您可以检查p的值并以交互方式获取密码 然后,您可以检查p的值,并通过一个简单的类以交互方式获取密码:[Python argparse]如果没有给出值,则将参数的行为设置为交互式,python,default-value,argparse,interactive,Python,Default Value,Argparse,Interactive,我想知道是否有可能根据是否给定值来改变参数的行为 通常,我希望提供一种交互式方式来输入密码 示例用法: $script.py=>使用参数“p”的默认参数值 $script.py-p mypass=>使用“mypass”作为“p”的值 $script.py-p=>以交互方式获取密码 然后,您可以检查p的值并以交互方式获取密码 然后,您可以检查p的值,并通过一个简单的类以交互方式获取密码: class AskUser: def __init__(self, type, func, *args
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()
一个简单的类:
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来自哪里?AskUser来自哪里?