2009-08-22 70 views
7

我正在編寫一個接受命令行參數的Python程序。我正在用getopt解析它們(儘管我選擇的getopt不是天主教婚姻,我更願意使用任何其他圖書館)。有沒有辦法指定某些參數必須給出,還是我必須手動確保所有參數都給出了?如何指定某些命令行參數在Python中是必需的?

編輯:我在迴應輿論譁然​​改變選項參數所有實例。不要說我對幫助我的人沒有反應:-)

+1

+1爲天主教婚姻比喻。它讓我微笑。 – Imagist 2009-08-22 09:23:03

+1

「強制選項」是矛盾的。你的意思是「論據」。而且 - 它看起來 - 你的意思是「參數」與「選項」的語法。選項/參數在此處定義得很好:http://docs.python.org/library/optparse.html#terminology和here:http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html#tag_12_02 – 2009-08-22 12:56:06

回答

7

最簡單的方法就是自己動手。即

found_f = False 
try: 
    opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) 
except getopt.GetoptError, err: 
    print str(err) 
    usage() 
    sys.exit(2) 
for o, a in opts: 
    if o == '-f': 
     process_f() 
     found_f = True 
    elif ... 
if not found_f: 
    print "-f was not given" 
    usage() 
    sys.exit(2) 
+0

我正在尋找一種方法不要自己做,但如果沒有,我想這是答案。 – 2009-08-22 08:09:22

9

至於我,我更喜歡使用optparse module,這是很強大的,對於exapmle它可以自動給出選項生成-h消息:

from optparse import OptionParser 

parser = OptionParser() 
parser.add_option("-f", "--file", dest="filename", 
        help="write report to FILE", metavar="FILE") 
parser.add_option("-q", "--quiet", 
        action="store_false", dest="verbose", default=True, 
        help="don't print status messages to stdout") 

(options, args) = parser.parse_args() 

您應手動檢查是否所有參數均給予:

if len(args) != 1: 
     parser.error("incorrect number of arguments") 

製作選項強制似乎很奇怪,我 - 他們被稱爲選項沒有沒有任何感...

+0

如果值*必須*給出,但您可以選擇賦予哪個值,那麼它仍然是一個選項,不是嗎?你會怎麼稱呼它? – 2009-08-22 08:17:05

+0

對不起,我還沒有明白這個的目的。你能舉一個例子嗎?描述cli輸入?沒有必要的確切問題,你正在解決,只是任何... – 2009-08-22 08:28:22

+0

當然。我正在編寫一個適用於文件的腳本。如果您不指定文件名,腳本將不知道要處理什麼,所以文件名是強制性的。 – 2009-08-22 09:38:14