我如何使用带有可变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)
现在,如果我有一个变量,它会打印出一些值,虽然不正确但是会打印出一些值:
$python3 vasp.py --dos 111
111
None # IT SHOULDN'T BE NONE
DOSY
但没有争论什么。
我也尝试过使用正常的sys.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
我尝试了hpaulj的建议。它给出了:
$python3 tt.py --dos 12
Namespace(dos='12')
1
DOSY
即使没有参数,它仍然不会打印任何东西。
None
。你使用的Python版本是什么?我已经尝试了3.5.1和2.7.11两个版本,两个版本都可以正常工作。你需要一个[mcve]。 - Morgan Thrapplen(args.dos) > 1
并不是你想象中的那样。它检查你是否输入了超过1位数字。 - Morgan Thrappprint(args)
直接查看解析出来的内容吗? - hpaulj--dos
和完全不使用它,它应该做什么? - hpaulj