我试图解决python的 argparse 功能
的问题我想要实现的是,如果指定-k参数,则将其设置为其默认值(假设为5),但是如果设置了-k = 3,则&# 39; K'现在包含3 ...
以下是一个例子:
python3 test.py -k
命名空间(K == 5)
python3 test.py -k=3
命名空间(K == 3)
有可能得到这样的东西吗?
test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-k ', metavar='n', type=int, default=5, dest='number')
args = parser.parse_args()
print(args)
提前致谢
答案 0 :(得分:1)
这个怎么样:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-k',metavar='n', dest='number', action='append', nargs='?', const=5)
args = parser.parse_args()
print(args.number[0])
'python3 test.py -k'输出:
5
'python3 test.py -k = 3'输出:
3
使用sys
的示例:
import sys
k = 5
for opt in sys.argv:
if opt.split('=')[0] == '-k':
if '=' in opt:
print(opt.split('=')[1])
if '=' not in opt:
print(k)
elif len(sys.argv) is 1:
print('No arguments were supplied')
答案 1 :(得分:0)
这有点像黑客,但你可以用空格替换参数中的所有等号,然后在它们上使用argparse。如果您仍想使用argparse,例如,这可能会更好其他论据。
这意味着-k = 3和-k 3都可以。虽然-k = 3 = -k = 4 = -k也会被解析而没有错误。
改编自jmunsch的答案:
import argparse
import sys
# split all args with equal sign
args = []
for arg in sys.argv[1:]:
args.extend(arg.split('='))
# parse the args
parser = argparse.ArgumentParser()
parser.add_argument('-k', metavar='n', type=int, dest='number',
action='append', nargs='?', const=5)
args = parser.parse_args(args)
print(args.number[0])
通过仅拆分以' -k ='开头的参数,可以使这更加智能化:
# split all args with equal sign
args = []
for arg in sys.argv[1:]:
if arg[:2] == '-k=':
args.extend(arg.split('='))
else:
args.append(arg)