使用getopt解析命令列引數

2021-07-23 15:20:54 字數 1504 閱讀 9235

python中可以使用getopt來解析命令列引數,其定義如下:

getopt(args, shortopts, longopts=)

其中,

getopt返回opts, args元組,opts是根據shortopts, longopts引數解析出來的(key, value)列表,

而其他剩餘引數就會放到args列表中。

舉例最直觀:

>>> opts, args = getopt.getopt(['-a', '-b', '--xyz'], 'ab', ['xyz'])

>>> print(opts)

[('-a', ''), ('-b', ''), ('--xyz', '')]

>>> print(args)

可以看到,所有解析出來的選項value都是空。

如果要告訴getopt選項有引數值,需要在shortopts, longopts中指定。

>>> opts, args = getopt.getopt(['-a', '111', '-b', '--xyz', '222'], 'a:b', ['xyz='])

>>> print(opts)

[('-a', '111'), ('-b', ''), ('--xyz', '222')]

>>> print(args)

通過在短選項字元後新增冒號:,長選項字串後新增等號=,以告知getopt相應選項後會有引數值。

引數值還可以與選項寫在一起。

>>> opts, args = getopt.getopt(['-a111', '-b', '--xyz=222'], 'a:b', ['xyz='])

>>> print(opts)

[('-a', '111'), ('-b', ''), ('--xyz', '222')]

引數列表末尾不以-開頭的選項,都會放到args中。

>>> opts, args = getopt.getopt(['-a', '-b', '--xyz', '111', '222'], 'ab', ['xyz'])

>>> print(args)

['111', '222']

注意有引數值和沒有引數值的選項設定不要弄錯,不然解析出來的結果就會出現錯亂。

>>> opts, args = getopt.getopt(['-a', '-b'], 'a:b')

>>> print(opts)

[('-a', '-b')]

>>> opts, args = getopt.getopt(['-a', '-b', '--xyz'], 'ab:')

>>> print(opts)

[('-a', ''), ('-b', '--xyz')]

如上,由於指定了a/b選項有引數值,getopt就把-a/-b選項後面的選項當做了引數值。

linux開發 命令列引數解析 getopt

linux大部分工具都是以命令列方式執行,因此都需要對命令列引數解析,它們大多都是用相同的解析方法!有點廢話 再次記錄下來!省得以後再查。大部分軟體都是用getopt系列函式解析命令列,glibc中就提供了該函式的實現,即使沒有依賴glibc,其他軟體包也會提供相應的實現。短格式的引數解析 int ...

getopt函式,命令列解析

getopt函式 函式功能 用來解析命令列引數,引數argc和ar 分別代表引數個數和內容,跟main 函式裡的命令列引數一樣 函式所在標頭檔案 include 函式原型定義 int getopt int argc,char const ar const char optstring 引數optst...

Python3 getopt解析命令列引數

在學c語言的時候就知道可以通過argc獲取命令列引數個數,可以通過ar 獲取具體引數。但自己寫的程式獲取到的引數一是沒有鍵值形式二是寫的引數不能亂序,和系統命令不太一樣。再往後點知道有getopt這個東西,但印象中嘗試理解其用法很多次都沒什麼結果 最近又越來多寫程式,再次感覺很有必要掌握。這裡以py...