如何解决当存在长标识符时,argparse排除短标识符
我正在尝试在同一参数中添加一个字符和一个关键字,这意味着我可以按值或关键字来引用,例如:python my_module.py -k abc
或python --keyword abc
,并且我希望两者都能但是,当我添加名称并调用args.k
时,会出现命名空间错误。我在这里抬头,发现了询问相同错误的问题,但没有一个回答我的问题。
def main(argv):
parser = argparse.ArgumentParser()
parser.add_argument('-w','--website',help='Website that returns ip address as response content',default='http://icanhazip.com')
parser.add_argument('-f','--file',help='File containing raw proxies delimited by \n',default='proxy_urls.txt')
parser.add_argument('-t','--timeout',help='Request timeout',default=10,type=int)
parser.add_argument('-s','--socks',help='4 or 5 for SOCKS version',default='')
parser.add_argument('-j','--jobs',help='Number of parallel jobs',default=4,type=int)
parser.add_argument('-o','--output',help='Output destination',default='.')
args = parser.parse_args(argv)
tester = ProxyTester(args.f,args.w,args.t,args.s)
tester.test_proxies(args.j,args.o)
if __name__ == '__main__':
main(sys.argv[1:])
在:
>> python3 proxy_tester.py
出局:
Traceback (most recent call last):
File "proxy_tester.py",line 152,in <module>
main(sys.argv[1:])
File "proxy_tester.py",line 147,in main
tester = ProxyTester(args.f,args.s)
AttributeError: 'Namespace' object has no attribute 'f'
这是print(args)
的输出:
Namespace(file='proxy_urls.txt',jobs=4,output='.',socks='',timeout=10,website='http://icanhazip.com')
解决方法
POSIX约定允许参数以简洁的单破折号和单字母形式或冗长的形式以双破折号和详细名称传递。尤其是使用布尔标志时,这会使命令更快更短:
curl -LIv
curl -L -I -v
curl --location --head --verbose
这些命令完全相同,但是一旦记住了速记键,第一个命令的键入速度会快很多。
在您的Python代码中,您显然希望将其标准化为一个参数。您不想不想做:
if args.L or args.location: ...
Argparse使用详细名称作为参数的规范名称。您可以使用the dest
argument进行自定义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。