如何使用argparse和變量nargs做條件循環?所以,基本上,它應該運行或不運行。 我想:argparse中的可選nargs變量
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]。 –
另外,我不認爲'len(args.dos)> 1'會做你認爲它的作用。它會檢查您是否輸入了超過1位數字的號碼。 –
您是否嘗試過'print(args)'來直接查看被解析的內容? – hpaulj