如何使用变量nargs对argparse执行条件循环?所以,基本上,它应该运行有无争论。 我正在尝试:
parser = argparse.ArgumentParser(description="output parser")
group = parser.add_mutually_exclusive_group()
group.add_argument("--dos", help="get DOSCAR for plot",
nargs="?", metavar=("int"))
args = parser.parse_args()
if args.dos:
if len(args.dos) > 1:
chosen = int(args.dos[0])
chdos = "at_dos"+args.dos[0]+".dat"
else:
chosen = None
inpt = "DOSY"
print(chosen)
print(inpt)
现在,如果我有变量,那么它会打印一些值,错误的,但是有些值:
^{pr2}$但没有任何理由。在
我也试过用普通的系统argv,作为:
def get_dos():
if len(sys.argv) > 2:
chosen = int(sys.argv[2])
chdos = "at_dos"+sys.argv[2]+".dat"
else:
chosen = None
inpt = "DOSCAR"
print(sys.argv)
print(args.dos)
print(chosen)
print(inpt)
在这种情况下,当有选项时,它给出正确的结果:
python3 vasp.py --dos 12
['vasp.py', '--dos', '12']
12
12
DOSCAR
但同样,没有任何选择:
$python3 vasp.py --dos
我试过接受保罗的建议。它提供:
$python3 tt.py --dos 12
Namespace(dos='12')
1
DOSY
毫无疑问,它仍然没有印刷任何东西。在
在Ipython会话中简化解析器:
在本例中,}是数字1。将
args.dos
将是字符串“111”,其中len
3,而{nargs
留空(默认无)。在使用
^{pr2}$nargs='?'
我还可以使用不带参数的标志,在这种情况下,值是默认值None
。在nargs=
?is most useful with a
const, which gives a convenient 3 way action. I can add
type=int`将字符串(如果有的话)转换为整数。在其他的
nargs
,比如1,'*'和'+'给你一个列表,你可以检查它的长度等等=================
在你的
argv
测试中sys.argv
是一个列表,因此如果有足够的元素来应用sys.argv[2]
步骤,那么len是计数的。在这不起作用,因为
args.dos
是单个字符串,而不是列表。在len(args.dos)
是字符串中的字符数,args.dos[0]
是第一个字符。在==========
如果我定义:
这些测试产生的值符合您的需要:
感谢所有回复的人,特别是@hpaulj。但他们都没有真正解决我的问题。所以,我走了另一条路。我把这个贴在这里是为了完整。在
从而产生预期结果:
^{pr2}$您需要替换nargs=“?”使用nargs=“*”。将nargs设置为“?”表示将有1个可选参数。您需要的是可选参数的列表,即“*”。像这样。在
相关问题 更多 >
编程相关推荐