1. 程式人生 > >Python optparser庫詳解

Python optparser庫詳解

一直以來對optparser不是特別的理解,今天就狠下心,靜下心研究了一下這個庫。當然了,不敢說理解的很到位,但是足以應付正常的使用了。廢話不多說,開始今天的分享吧。

鎮樓圖

簡介

optparse模組主要用來為指令碼傳遞命令引數功能.

引入

在IDE中引入optparser是很方便的。

from optparser import OptionParser

初始化

相對而言,初始化需要我們多注意一點點了。
因為我們有兩種不同的方式來初始化一個parser。

  • 帶有Usage選項:
    這樣的好處是可以模擬帶有幫助的終端使用,如下
>>> from optparse import OptionParser
>>> usage = "myprog[ -f <filename>
][-s <xyz>] arg1[,arg2..]" >>> parser=OptionParser(usage) #這裡為類添加了引數usage

顯示的時候就會使這樣的了。

>>> parser.print_help()
Usage: myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]
Options:
  -h, --help            show this help message and exit  #此兩行根據option自動生成,比較智慧額~~
  -f FILENAME, --file=FILENAME
                        no any help  #自定義幫助資訊
  • 不帶Usage選項:
    正常來說可以不用設定引數。
parser = OptionParser()

新增選項

為命令列新增選項是我們這次最主要的工作了,也是核心。但是在新增選項之前,我們應該明白,為什麼要新增選項?選項的工作原理是什麼?這樣我們才能更好的理解optparser的設計思想。

選項:類比於Unix的工作模式。舉例 ls -a 或者 ls -all.
我們添加了一個名為all 的選項,為了簡化操作,預設設定為a.

在OptionParser中要想實現這樣的一個效果,我們只需要藉助如下的一行程式碼。

# 這只是示意而已,沒有什麼意義
parser.add_option('-a'
, '--all' )

核心

作為核心就是指add_option的其他的引數。有如下幾個:

  • action: 驗證輸入資料型別是否和type 匹配,並將符合要求的這個引數儲存到dest變數中。有以下幾個屬性:
    • store 預設值
      - store_false 標記而已 配合下邊的那個store_true來進行程式碼的“標記”,輔助流程控制。
    • store_true 標記而已
  • type : 指的是對應於引數,如-f,-n等的接下來的那個引數的資料型別,有string,int,float等等
  • dest : 用於儲存臨時變數,其值可以作為options的屬性進行訪問。儲存的內容就是如-f,-n 等緊挨著的那個引數內容。
  • help: 提供使用者友好的幫助資訊,一般可以用來解釋本add_option方法的功能闡述。

單純的講起來很枯燥,下面看一個小例子就會明白了。

>>> parser.add_option("-f", "--file",action="store", type="string", dest="filename")
<Option at 0x2d72f48: -f/--file>
>>> args = ["-f", "foo.txt"] #這個是模擬命令列的輸入
>>> (options, args) = parser.parse_args(args)
>>> options.filename
'foo.txt'

對於action屬性可以看看接下來的這段程式碼。

>>> from optparse import OptionParser
>>> parser=OptionParser()
>>> parser.add_option("-v", action="store_true", dest="verbose")
<Option at 0x2ceb888: -v>
>>> parser.add_option("-q", action="store_false", dest="verbose")
<Option at 0x2d68e48: -q>
>>> fakeArgs = ['-v','hello']
>>> options, args = parser.parse_args(fakeArgs)
>>> options.verbose
True
>>> fakeArgs = ['-q','bye bye']
>>> options, args = parser.parse_args(fakeArgs)
>>> options.verbose
False
#如果同時寫兩個選項v和q,它會以哪個為準呢,答案是以最後出現的為準
>>> fakeArgs = ['-q','bye bye','-v','hello']
>>> options, args = parser.parse_args(fakeArgs)
>>> options .verbose
True

非核心

這裡主要是講解一下關於default引數的作用,其實就是給dest的預設值。

如果我們沒有指定dest的值的話,default的值就會作為dest的預設值來進行使用!

>>> parser.add_option("-x", action="store", dest="verbose", default="defaultvalue")
<Option at 0x2d77148: -x>
>>> options, args = parser.parse_args() #這裡沒有傳引數
>>> options.verbose
'defaultvalue'

完整的demo

from optparse import OptionParser
usage = "myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]"
optParser = OptionParser(usage)
optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName")
ooptParser.add_option("-v","--vison", action="store_false", dest="verbose",default='None',
                     help="make lots of noise [default]")
fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']  
options, args = optParser.parse_args(fakeArgs)
print options.fileName
print options.verbose
print options
print args
print optParser.print_help()

執行結果如下:


file.txt
False
{'verbose': False, 'fileName': 'file.txt'}
['this is some what', 'arg2', 'arge']
Usage: myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]
Options:
  -h, --help            show this help message and exit
  -f FILENAME, --file=FILENAME
  -v, --vison           make lots of noise [default]

相關推薦

Python optparser

一直以來對optparser不是特別的理解,今天就狠下心,靜下心研究了一下這個庫。當然了,不敢說理解的很到位,但是足以應付正常的使用了。廢話不多說,開始今天的分享吧。 簡介 optparse模組主要用來為指令碼傳遞命令引數功能. 引入 在

Python--urllib3

Python--urllib3庫詳解      Urllib3是一個功能強大,條理清晰,用於HTTP客戶端的Python庫,許多Python的原生系統已經開始使用urllib3。Urllib3提供了很多python標準庫裡所沒有的重要特性:             

python BeautifulSoup

BeautifulSoup Beautiful Soup 是一個可以從HTML或XML檔案中提取資料的Python庫.它能夠通過你喜歡的轉換器實現慣用的文件導航,查詢,修改文件的方式 官方文件連結,相同效果的庫還有pyquery模組,詳見此 解析器 對網頁進行析取時,若未規定解析器,此時使用

Python標準——turtle、random、time

目錄 前言 2. 畫筆 前言 公眾號要發一個python標準庫介紹,我先記錄到本部落格中,後面再過渡過去。這三個標準庫是今年計算機python二級大綱中提到的3個標準庫,不難但是是比較基礎但庫,也需要掌握。 一

python numpy

陣列的統計函式: >>>#sum(a,axis=None):計算和 >>>#mean(a,axis=None):計算平均值 >>>#average(a,axis=None,weights=None):加權平均數

python爬蟲學習筆記二:Requests及HTTP協議

Requests庫的安裝:https://mp.csdn.net/postedit/83715574 r=requests.get(url,params=None,**kwargs) 這個r是Response物件 url :擬獲取頁面的url連結 params:url中的額外引數

Python爬蟲系列-Urllib

Urllib庫詳解 Python內建的Http請求庫: * urllib.request 請求模組 * urllib.error 異常處理模組 * urllib.parse url解析模組 * urllib.robotparser robots.txt解析模組 #### 相比在python2基礎上的變化

Python爬蟲系列-Requests

Requests基於urllib,比urllib更加方便,可以節約我們大量的工作,完全滿足HTTP測試需求。 例項引入 import requests response = requests.get('https://www.baidu.com/') print(type(response))

python爬蟲urllib

什麼是Urllib Urllib是python內建的HTTP請求庫,中文文件如下:https://docs.python.org/3/library/urllib.html包括以下模組urllib.request 請求模組urllib.error 異常處理模組urllib.parse url解析模組urll

python爬蟲pyquery

PyQuery庫也是一個非常強大又靈活的網頁解析庫,如果你有前端開發經驗的,都應該接觸過jQuery,那麼PyQuery就是你非常絕佳的選擇,PyQuery 是 Python 仿照 jQuery 的嚴格實現。語法與 jQuery 幾乎完全相同,所以不用再去費心去記一些奇怪的方法了。 官網地址:http://

python time和datetime

import time import datetime ''' 重點是元祖、時間戳、格式化的字串之間互相轉化 元祖轉時間戳:使用time.mktime(元祖) 元祖轉格式化的字串:使用time.strftime(元祖) 時間戳轉元祖: 思路,時間戳首先轉化為格式化的字串,再從

Python繪圖Turtle

        Turtle庫是Python語言中一個很流行的繪製圖像的函式庫,想象一個小烏龜,在一個橫軸為x、縱軸為y的座標系原點,(0,0)位置開始,它根據一組函式指令的控制,在這個平面座標系中移動,從而在它爬行的路徑上繪製了圖形。 turtle繪圖的基礎知識: 1.

python爬蟲之requests(一,如何通過requests來獲得頁面資訊)

前言: 爬蟲的基礎是與網頁建立聯絡,而我們可以通過get和post兩種方式來建立連線,而我們可以通過引入urllib庫[在python3的環境下匯入的是urllib;而python2的環境下是urllib和urllib2]或者requests庫來實現,從程式的複雜度和可讀性

Python安裝MySQL(解決Microsoft Visual C++ 9.0 is required )

前面我們介紹的Python網路爬蟲通常將抓取的資料儲存至TXT或CSV檔案,而當資料量增加之時,就需要將其儲存至本地資料庫了。Python訪問資料庫需要對應的介面程式,我們可以把介面程式理解為Pytho

python--裝飾器

blog 內容 class align fun turn strip 叠代器 ros Python---裝飾器詳解 定義: 本質上是一個函數。作用是用來裝飾另一個函數(即被裝飾函數),給被裝飾函數添加功能。前提是不能改變被裝飾函數的源代碼和調用方式。這樣的一個函數稱之為裝飾

Python裝飾器

def 功能 style out return 裝飾器 代碼 方法 情況 首先是不使用裝飾器的情況,又需要在不修改原函數的情況話修改函數結果 1 def outer(func): 2 def inner(): 3 print("Hello")

C++11 std::chrono

toolbar space max mil exp 值類型 cond 精度 ++i 所謂的詳解只不過是參考www.cplusplus.com的說明整理了一下,因為沒發現別人有詳細講解。   chrono是一個time library, 源於boost,現在已經是C++標準。

mysql數據 之 自學成才1

簡化 註意 可能 方法 after 字符型 專題 mar 建議 一、學習目錄 1.認識數據庫和mysql 2.mysql連接 3.入門語句 4.詳解列類型 5.增刪改查 INSERT INTO 表名(列1,…… 列n) VALUES(值 1,…… 值 n); *(列

python魔法方法

返回 call __init__ and -m 描述 nbsp shift 賦值 文章來源:http://blog.csdn.net/koko66/article/details/42709279 據說,Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍

Python模塊以及import本質,獲得文件當前路徑os.path.abspath,獲得文件的父目錄os.path.dirname,放到系統變量的第一位sys.path.insert(0,x)

alt 獲取 詳解 nbsp spa 絕對路徑 解釋 系統 port 模塊介紹 1、定義: 模塊:用來從邏輯上組織python代碼(變量,函數,類,邏輯:實現一個功能),本質就是.py結尾的python文件(文件名:test.py,對應的模塊名:test) 包:用來從邏輯上