python argparse 多参数处理
python argparse multiple arguments processing
初学者。在 argparse 上需要一些帮助。下面是代码。
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument('-a', '--add', help="input the data in format ip:port:name", nargs='*')
p.add_argument('-d', '--delete', help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
add_List = args.add
del_List = args.delete
addN = "adding.."
delN = "deleting.."
def test(what):
for i in range(5):
print what
######### expected output: "adding.." 5 times
for i in add_List:
test(addN)
######### expected output: "deleting.." 5 times
for i in deL_List:
test(delN)
我基本上想要的是,当脚本是 运行 时,
- ./script -a 1.1.1.1:99:na1 it should print "adding.." 5 times
- ./script -d 1.1.1.1:99:na1 it should print "deleting.." 5 times
请不要介意脚本中给出的参数,因为它们将被单独处理。我只想了解在这样的场景中使用带有适当条件的 argparse 的最有效方法。此外,如果我也能打印出一份合理的使用指南,那就太好了。
在我看来,这只是一个错字。在第 26 行 del_list 而不是 del_List.
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument('-a', '--add', help="input the data in format ip:port:name", nargs='*')
p.add_argument('-d', '--delete', help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
add_List = args.add or [] #['192.168.1.10:80:name1', '172.25.16.2:100:name3']
del_List = args.delete or [] #['192.168.1.10:80:name1', '172.25.16.2:100:name3']
addN = "adding.."
delN = "deleting.."
def test(what):
for i in range(5):
print(what)
######### expected output: "adding.." 5 times
for i in add_List:
test(addN)
######### expected output: "deleting.." 5 times
for i in del_List:
test(delN)
输出
adding..
adding..
adding..
adding..
adding..
deleting..
deleting..
deleting..
deleting..
deleting..
参数
--delete 123 --add 456
当我第一次 运行 你发布的代码时,我得到
1550:~/mypy$ python stack43690807.py -a 1.1.1.1:99:na1
adding..
adding..
adding..
adding..
adding..
Traceback (most recent call last):
File "stack43690807.py", line 23, in <module>
for i in deL_List:
NameError: name 'deL_List' is not defined
如果我更正错字(大写 L)
1819:~/mypy$ python stack43690807.py -a 1.1.1.1:99:na1
adding..
adding..
adding..
adding..
adding..
Traceback (most recent call last):
File "stack43690807.py", line 23, in <module>
for i in del_List:
TypeError: 'NoneType' object is not iterable
这里的问题是默认是None
。 for i in None:
不起作用。所以我们要么需要测试 None
,例如
if add_List is not None:
for i in add_List:
....
或者我们需要将默认值更改为 default=[]
。此外,我还添加了一个 print(args)
语句,因此我们可以更清楚地了解解析器生成的内容。
1819:~/mypy$ python stack43690807.py -a 1.1.1.1:99:na1
Namespace(add=['1.1.1.1:99:na1'], delete=[])
adding..
adding..
adding..
adding..
adding..
1820:~/mypy$ python stack43690807.py -d 1.1.1.1:99:na1
Namespace(add=[], delete=['1.1.1.1:99:na1'])
deleting..
deleting..
deleting..
deleting..
deleting..
import argparse
p = argparse.ArgumentParser()
p.add_argument('-a', '--add', help="input the data in format ip:port:name", nargs='*', default=[])
# add default parameter
p.add_argument('-d', '--delete', help="input the data in format ip:port:name", nargs='*', default=[])
args = p.parse_args()
print(args)
add_List = args.add #['192.168.1.10:80:name1', '172.25.16.2:100:name3']
del_List = args.delete #['192.168.1.10:80:name1', '172.25.16.2:100:name3']
addN = "adding.."
delN = "deleting.."
def test(what):
for i in range(5):
print what
######### expected output: "adding.." 5 times
for i in add_List:
test(addN)
######### expected output: "deleting.." 5 times
for i in del_List: # <== correct typo
test(delN)
初学者。在 argparse 上需要一些帮助。下面是代码。
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument('-a', '--add', help="input the data in format ip:port:name", nargs='*')
p.add_argument('-d', '--delete', help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
add_List = args.add
del_List = args.delete
addN = "adding.."
delN = "deleting.."
def test(what):
for i in range(5):
print what
######### expected output: "adding.." 5 times
for i in add_List:
test(addN)
######### expected output: "deleting.." 5 times
for i in deL_List:
test(delN)
我基本上想要的是,当脚本是 运行 时,
- ./script -a 1.1.1.1:99:na1 it should print "adding.." 5 times
- ./script -d 1.1.1.1:99:na1 it should print "deleting.." 5 times
请不要介意脚本中给出的参数,因为它们将被单独处理。我只想了解在这样的场景中使用带有适当条件的 argparse 的最有效方法。此外,如果我也能打印出一份合理的使用指南,那就太好了。
在我看来,这只是一个错字。在第 26 行 del_list 而不是 del_List.
#!/usr/bin/python
import argparse
import re
import string
p = argparse.ArgumentParser()
p.add_argument('-a', '--add', help="input the data in format ip:port:name", nargs='*')
p.add_argument('-d', '--delete', help="input the data in format ip:port:name", nargs='*')
args = p.parse_args()
add_List = args.add or [] #['192.168.1.10:80:name1', '172.25.16.2:100:name3']
del_List = args.delete or [] #['192.168.1.10:80:name1', '172.25.16.2:100:name3']
addN = "adding.."
delN = "deleting.."
def test(what):
for i in range(5):
print(what)
######### expected output: "adding.." 5 times
for i in add_List:
test(addN)
######### expected output: "deleting.." 5 times
for i in del_List:
test(delN)
输出
adding..
adding..
adding..
adding..
adding..
deleting..
deleting..
deleting..
deleting..
deleting..
参数
--delete 123 --add 456
当我第一次 运行 你发布的代码时,我得到
1550:~/mypy$ python stack43690807.py -a 1.1.1.1:99:na1
adding..
adding..
adding..
adding..
adding..
Traceback (most recent call last):
File "stack43690807.py", line 23, in <module>
for i in deL_List:
NameError: name 'deL_List' is not defined
如果我更正错字(大写 L)
1819:~/mypy$ python stack43690807.py -a 1.1.1.1:99:na1
adding..
adding..
adding..
adding..
adding..
Traceback (most recent call last):
File "stack43690807.py", line 23, in <module>
for i in del_List:
TypeError: 'NoneType' object is not iterable
这里的问题是默认是None
。 for i in None:
不起作用。所以我们要么需要测试 None
,例如
if add_List is not None:
for i in add_List:
....
或者我们需要将默认值更改为 default=[]
。此外,我还添加了一个 print(args)
语句,因此我们可以更清楚地了解解析器生成的内容。
1819:~/mypy$ python stack43690807.py -a 1.1.1.1:99:na1
Namespace(add=['1.1.1.1:99:na1'], delete=[])
adding..
adding..
adding..
adding..
adding..
1820:~/mypy$ python stack43690807.py -d 1.1.1.1:99:na1
Namespace(add=[], delete=['1.1.1.1:99:na1'])
deleting..
deleting..
deleting..
deleting..
deleting..
import argparse
p = argparse.ArgumentParser()
p.add_argument('-a', '--add', help="input the data in format ip:port:name", nargs='*', default=[])
# add default parameter
p.add_argument('-d', '--delete', help="input the data in format ip:port:name", nargs='*', default=[])
args = p.parse_args()
print(args)
add_List = args.add #['192.168.1.10:80:name1', '172.25.16.2:100:name3']
del_List = args.delete #['192.168.1.10:80:name1', '172.25.16.2:100:name3']
addN = "adding.."
delN = "deleting.."
def test(what):
for i in range(5):
print what
######### expected output: "adding.." 5 times
for i in add_List:
test(addN)
######### expected output: "deleting.." 5 times
for i in del_List: # <== correct typo
test(delN)