2010-10-28 69 views
2

我希望能夠傳遞參數而不必指定optparse選項。如果我確實通過了一個選項,它必須是已知的選項,否則腳本將失敗。如果給出值,則忽略optparse

Rsync的下列文件到目的地

myscript.py filename 

Rsync的以下文件夾到目的地(這一切都是想通了函數創建)。

myscript.py -f foldername 

原因是,我有一個數組(或字典)與「文件夾名稱」綁定。如果沒有選項通過,CLI中給出的參數是用戶調用腳本的工作文件夾中的文件。通過-f表示上傳一個文件夾,其值存儲在一個字典中(用戶可以在任何目錄下,該文件夾的路徑是提前知道的)。

我最好爲這兩個選項添加選項嗎? -f爲文件和-v爲文件夾又名版本?

+0

你大概可以按照另一種方法是,檢查參數,然後進行相應的處理。例如,如果os.path.isdir(argument)://處理目錄。如果os.path.isfile(參數):處理文件。也許這個? – user225312 2010-10-28 19:05:52

回答

0

我一直都很明確,但是你可以短路optparse。

# args[0] is always the executable's name 
if len(args) > 1: 
    parser.parse_args(args, options) 
else: 
    #open file 
+0

如果args = sys.argv,請記住len(args)總是> = 1.這是因爲argv [0]是腳本的名稱。 – 2010-10-28 19:34:48

+0

'> 2'不起作用。 ''1'作品 – luckytaxi 2010-10-28 19:40:09

+0

哈,謝謝,我起初有這個,但出於某種原因改變了它。 – NorthIsUp 2010-10-28 20:27:05

0

款待-f作爲不帶參數的選項,並用它來切換位置參數的行爲(即foldername)。

0

parser.parse_args()總是返回兩個值:解析選項之後剩餘

  • 選項,包含所有選項
  • ARGS,位置參數列表中值的對象

Totorial

因此,你可以做這樣的事情:

parser = OptionParser() 
parser.add_option("-f", "", action="store_true", dest="folder", default=False) 
(options, args) = parser.parse_args(sys.argv) 

fname = args[1] # name of folder or file 

if options.folder: 
    # do stuff for folder 
else: 
    # do stuff for file