小編給大家分享一下Python命令行解析模塊的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
這個模塊可以幫助腳本解析命令行參數,一般是sys.argv[1:]。它遵循著Unix的getopt()函數相同的約定(用-/--指定命令參數)。這個模塊提供兩個函數(getopt.getopt()/getopt.gnu_getopt())和一個參數異常(getopt.GetoptError)。
這里重點介紹getopt.getopt()這個函數。
函數原型:getopt.getopt(args, options[, long_options])
這個函數有三個參數:
args:腳本要解析的命令行參數;
options:命令行短選項,如果指定的短選項后面需要跟參數的話,要在相應短選項后面加“:”,如e:;
long_options:命令行長選項,這個參數是可選的。如果指定的長選項后面要跟參數的話,要在相應長選項后面加上“=”,如conding=;
當給定的命令行參數解析不了的話,就會拋出GetoptError異常。
函數的返回值包含兩個元素:
第一個元素是一個(option,value)元組對。Option是解析的參數,value是對應參數的值;
第二個元素是腳本不需要執行的參數列表。也就是這些參數是多余的;
下面看幾個Demo:
短選項:
>>> importgetopt >>> args='-a -b -cfoo -d bar a1 a2'.split() >>> args ['-a', '-b', '-cfoo', '-d', 'bar', 'a1','a2'] >>> optlist, args= getopt.getopt(args,'abc:d:') >>> optlist [('-a', ''), ('-b', ''), ('-c', 'foo'),('-d', 'bar')] >>> args ['a1', 'a2']
長選項:
>>> s='--condition=foo --testing --output-file abc.def -x a1 a2' >>> args= s.split() >>> args ['--condition=foo', '--testing','--output-file', 'abc.def', '-x', 'a1', 'a2'] >>> optlist, args= getopt.getopt(args,'x', [ ... 'condition=','output-file=','testing']) >>> optlist [('--condition', 'foo'), ('--testing', ''),('--output-file', 'abc.def'), ('-x', '')] >>> args ['a1', 'a2']
在腳本當中經典的應用實例:
importgetopt,sys defmain(): try: opts, args = getopt.getopt(sys.argv[1:],"ho:v", ["help","output="]) except getopt.GetoptErroras err: # print help information and exit: printstr(err) # will print something like "option -a not recognized" usage() sys.exit(2) output =None verbose =False for o, a in opts: if o =="-v": verbose =True elif o in ("-h","--help"): usage() sys.exit() elif o in ("-o","--output"): output = a else: assertFalse,"unhandled option" # ... if __name__ =="__main__": main()
argparse模塊使得編寫用戶友好的命令行接口非常容易。程序只需定義好它要求的參數,然后argparse將負責如何從sys.argv中解析出這些參數。argparse模塊還會自動生成幫助和使用信息并且當用戶賦給程序非法的參數時產生錯誤信息。
使用argparse模塊一般需要三個步驟:
1. 創建一個解析器
使用argparse的第一步是創建一個ArgumentParser對象:
>>> parser= argparse.ArgumentParser()
ArgumentParser對象會保存把命令行解析成Python數據類型所需要的所有信息。
2. 添加參數
通過調用add_argument()方法向ArgumentParser添加程序的參數信息。通常情況下,這些信息告訴ArgumentParser如何接收命令行上的字符串并將它們轉換成對象。這些信息被保存下來并在調用parse_args()時用到。例如:
>>> parser.add_argument('--name', help='username') >>> parser.add_argument('--pass', help='password ')
接下來,調用parse_args()返回的對象將帶有兩個屬性,name和pass。分別保存著用戶名與密碼。
3. 解析參數
ArgumentParser通過parse_args()方法解析參數。它將檢查命令行,把每個參數轉換成恰當的類型并采取恰當的動作。在大部分情況下,這意味著將從命令行中解析出來的屬性建立一個簡單的 Namespace對象。
>>> argments = parser.parse_args(['--name','li','--pass','si'])
在腳本中,parse_args()
調用一般不帶參數,ArgumentParser
將根據sys.argv
自動確定命令行參數。
ArgumentParser 對象
class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter,prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)
創建一個新的argmentParserr對象。所有的參數應該以關鍵字參數傳遞。下面有對每個參數各自詳細的描述,但是簡短地講它們是:
prog - 程序的名字(默認:sys.argv[0])
useage - 描述程序用法的字符串(默認:從解析器的參數生成)
description - 參數幫助信息之前的文本(默認:空)
epilog- 參數幫助信息之后的文本(默認:空)
parents - ArgmentParser 對象的一個列表,這些對象的參數應該包括進去
ormatter_class - 定制化幫助信息的類
prefix_chars - 可選參數的前綴字符集(默認:‘-‘)
fromfile_prefix_chars - 額外的參數應該讀取的文件的前綴字符集(默認:None)
argument_default - 參數的全局默認值(默認:None)
conflict_handler - 解決沖突的可選參數的策略(通常沒有必要)
add_help - 給解析器添加-h/–help 選項(默認:True)
add_argument() 方法
ArgumentParser.add_argument(nameor flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][,metavar][, dest])
定義應該如何解析一個命令行參數。下面每個參數有它們自己詳細的描述,簡單地講它們是:
name or flags- 選項字符串的名字或者列表,例如foo 或者-f, --foo。
action - 在命令行遇到該參數時采取的基本動作類型。
nargs - 應該讀取的命令行參數數目。
const- 某些action和nargs選項要求的常數值。
default - 如果命令行中沒有出現該參數時的默認值。
type- 命令行參數應該被轉換成的類型。
choices - 參數可允許的值的一個容器。
required - 該命令行選項是否可以省略(只針對可選參數)。
help - 參數的簡短描述。
metavar - 參數在幫助信息中的名字。
dest - 給parse_args()返回的對象要添加的屬性名稱。
以上是“Python命令行解析模塊的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。