2014-01-22 40 views
2

作爲主題,我想一個默認值之一的值來使用的位置參數爲可選參數

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument("input") 
args = parser.parse_args() # <--- breaks if one of the optional arguments given 
parser.add_argument("-o", "--output", action="store", default=args.input+".out") 
parser.add_argument("-s", "--skip-fields", action="store", default=1) 
args = parser.parse_args() 

一個可能的解決方案的可選參數的聲明之前插入args = parser.parse_args()但如果實際給出任何可選參數,它會中斷代碼。

可以這樣做嗎?

回答

1

args,rest = parser.parse_known_args() 

現在parser處理input,但忽略了休息更換第一parse_args(其實是把它rest)。

但是,在完成​​之後,有條件地設置默認值應該也能正常工作。從概念上講,它可以更簡單。

想想你想看到什麼時候出現錯誤,或者你需要幫助。是否需要設置默認值?

2

也許你可以給可選參數默認爲None或類似的東西,然後在後面的參數後處理中替換它?

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument("input") 
parser.add_argument("-o", "--output", action="store", default=None) 
args = parser.parse_args() 

if args.output is None: 
    args.output = args.input+".out" 
print args 

你甚至可以離開了default=None,因爲default valuedefaultNone

快速測試:

In [2]: run test.py my_filename 
Namespace(input='my_filename', output='my_filename.out')