pthon學習之argparse模組解析
1.建立解析器:
import argparse
parser = argparse.ArgumentParser(
description=’This is a PyMOTW sample program’,
)
argparse是一個完整的引數處理庫。引數可以根據add_argument()的action選項觸發不同action。支援的action有儲存引數(單個,或作為列表的一部分);儲存常量的值(對布林開關true/false有特殊處理)。預設動作是儲存引數值。支援type(指定儲存型別)和dest(指定儲存變數)等引數。
然後使用函式parse_args()進行引數解析,這個函式的輸入預設是sys.argv[1:],也可以使用其他字串列表。選項使用GNU/POSIX語法處理,可以混合選項和引數值。parse_args的返回值是一個包含命令引數的Namespace。所有引數以屬性的形式存在,比如args.myoption。
下面是一個簡單的示例:
import argparse parser = argparse.ArgumentParser(description='Short sampleapp') parser.add_argument('-a', action="store_true",default=False) parser.add_argument('-b', action="store",dest="b") parser.add_argument('-c', action="store",dest="c", type=int) print parser.parse_args(['-a', '-bval', '-c', '3'])
執行結果:
# pythonargparse_short.py
Namespace(a=True, b='val', c=3)
長引數也可以進行同樣處理:
import argparse
parser = argparse.ArgumentParser(
description='Examplewith long option names',
)
parser.add_argument('--noarg', action="store_true",
default=False)
parser.add_argument('--witharg', action="store",
dest="witharg")
parser.add_argument('--witharg2', action="store",
dest="witharg2", type=int)
print parser.parse_args(
[ '--noarg','--witharg', 'val', '--witharg2=3' ]
)
執行結果:
# python argparse_long.py
Namespace(noarg=True, witharg='val', witharg2=3)
不同於optparse,argparse可以很好地處理非可選引數(沒有’-‘等開頭的引數):
import argparse
parser = argparse.ArgumentParser(
description='Examplewith nonoptional arguments',
)
parser.add_argument('count', action="store",type=int)
parser.add_argument('units', action="store")
print parser.parse_args()
沒有指定型別的,預設是字串。執行結果:
# python argparse_arguments.py 3inches
Namespace(count=3, units='inches')
# python argparse_arguments.py some inches
usage: argparse_arguments.py [-h] count units
argparse_arguments.py: error: argument count: invalid intvalue: 'some'
# python argparse_arguments.py
usage: argparse_arguments.py [-h] count units
argparse_arguments.py: error: too few arguments
引數action有:
store:預設action模式,儲存值到指定變數。
store_const:儲存值在引數的const部分指定,多用於實現非布林的命令列flag。
store_true / store_false:布林開關。可以2個引數對應一個變數。
append:儲存值到列表,該引數可以重複使用。
append_const:儲存值到列表,儲存值在引數的const部分指定。
version 輸出版本資訊然後退出。
下面是各種action的示例:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-s', action='store',
dest='simple_value',
help='Storea simple value')
parser.add_argument('-c', action='store_const',
dest='constant_value',
const='value-to-store',
help='Store a constant value')
parser.add_argument('-t', action='store_true',
default=False,
dest='boolean_switch',
help='Set a switch to true')
parser.add_argument('-f', action='store_false',
default=False,
dest='boolean_switch',
help='Set a switch to false')
parser.add_argument('-a', action='append',
dest='collection',
default=[],
help='Add repeated values to a list')
parser.add_argument('-A', action='append_const',
dest='const_collection',
const='value-1-to-append',
default=[],
help='Add different values to list')
parser.add_argument('-B', action='append_const',
dest='const_collection',
const='value-2-to-append',
help='Add different values to list')
parser.add_argument('--version', action='version',
version='%(prog)s 1.0')
results = parser.parse_args()
print 'simple_value = %r' % results.simple_value
print 'constant_value = %r' % results.constant_value
print 'boolean_switch = %r' % results.boolean_switch
print 'collection = %r' % results.collection
print 'const_collection = %r' % results.const_collection
執行結果:
# python argparse_action.py -h
usage: argparse_action.py [-h] [-s SIMPLE_VALUE] [-c] [-t][-f]
[-a COLLECTION] [-A] [-B] [--version]
optional arguments:
-h, --help show this help message and exit
-s SIMPLE_VALUE Store a simple value
-c Store a constant value
-t Set a switch to true
-f Set a switch to false
-a COLLECTION Add repeated values to a list
-A Add different values to list
-B Add different values to list
--version show program's version number and exit
# python argparse_action.py --version
argparse_action.py 1.0
# python argparse_action.py -s value
simple_value ='value'
constant_value = None
boolean_switch = False
collection = []
const_collection = []
# python argparse_action.py -c
simple_value = None
constant_value ='value-to-store'
boolean_switch = False
collection = []
const_collection = []
# python argparse_action.py -t
simple_value = None
constant_value = None
boolean_switch = True
collection = []
const_collection = []
# python argparse_action.py -f
simple_value = None
constant_value = None
boolean_switch = False
collection = []
const_collection = []
# python argparse_action.py -a one -a two -a three
simple_value = None
constant_value = None
boolean_switch = False
collection =['one', 'two', 'three']
const_collection = []
# python argparse_action.py -B -A
simple_value = None
constant_value = None
boolean_switch = False
collection = []
const_collection = ['value-2-to-append', 'value-1-to-append']
ArgumentParser函式中的選項prefix_chars可以指定字首。預設使用UNIX風格,命令列使用‘-’作為字首。可以使用windows的’/’或者其他符號。
import argparse
parser = argparse.ArgumentParser(
description='Changethe option prefix characters',
prefix_chars='-+/',
)
parser.add_argument('-a', action="store_false",
default=None,
help='Turn A off',
)
parser.add_argument('+a', action="store_true",
default=None,
help='Turn A on',
)
parser.add_argument('//noarg', '++noarg',
action="store_true",
default=False)
print parser.parse_args()
執行結果:
[email protected] argparse]# pythonargparse_prefix_chars.py -h
usage: argparse_prefix_chars.py [-h] [-a] [+a] [//noarg]
Change the option prefix characters
optional arguments:
-h, --help show this help message and exit
-a Turn A off
+a Turn A on
//noarg, ++noarg
# python argparse_prefix_chars.py +a
Namespace(a=True, noarg=False)
# python argparse_prefix_chars.py -a
Namespace(a=False, noarg=False)
# python argparse_prefix_chars.py //noarg
Namespace(a=None, noarg=True)
# python argparse_prefix_chars.py ++noarg
Namespace(a=None, noarg=True)
# python argparse_prefix_chars.py --noarg
usage: argparse_prefix_chars.py [-h] [-a] [+a] [//noarg]
argparse_prefix_chars.py: error: unrecognized arguments:--noarg
# python argparse_prefix_chars.py --noarg
usage: argparse_prefix_chars.py [-h] [-a] [+a] [//noarg]
argparse_prefix_chars.py: error: unrecognized arguments:--noarg
處理配置檔案中的引數:
mport argparse
from ConfigParser import ConfigParser
import shlex
parser = argparse.ArgumentParser(description='Short sampleapp')
parser.add_argument('-a', action="store_true",default=False)
parser.add_argument('-b', action="store",dest="b")
parser.add_argument('-c', action="store",dest="c", type=int)
config = ConfigParser()
config.read('argparse_with_shlex.ini')
config_value = config.get('cli', 'options')
print 'Config :',config_value
argument_list = shlex.split(config_value)
print 'Arg List:', argument_list
print 'Results :', parser.parse_args(argument_list)
執行結果:
# python argparse_with_shlex.py
Config : -a -b 2
Arg List: ['-a', '-b', '2']
Results : Namespace(a=True, b='2', c=None)
其中ini檔案的內容如下:
# vi argparse_with_shlex.ini
[cli]
options = -a -b 2
上面例子使用了ConfigParser來讀取配置,再用shlex來切割引數。可以通過fromfile_prefix_chars 告知argparse輸入引數為檔案。
import argparse
#from ConfigParser import ConfigParser
#import shlex
parser = argparse.ArgumentParser(description='Short sampleapp',
fromfile_prefix_chars='@',
)
parser.add_argument('-a', action="store_true",default=False)
parser.add_argument('-b', action="store",dest="b")
parser.add_argument('-c', action="store",dest="c", type=int)
print parser.parse_args(['@argparse_fromfile_prefix_chars.txt'])
執行結果:
# python argparse_fromfile_prefix_chars.py
Namespace(a=True, b='2', c=None)
其中argparse_fromfile_prefix_chars.txt檔案的內容如下:
# vi argparse_fromfile_prefix_chars.txt
-a
-b
2
14.3.2自動生成選項
Argparse會自動生成的幫助和版本資訊。ArgumentParser的add_help引數控制幫助的生成,預設是開啟。
import argparse
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument(’-a’, action="store_true",default=False)
parser.add_argument(’-b’, action="store",dest="b")
parser.add_argument(’-c’, action="store",dest="c", type=int)
print parser.parse_args()
下例就關閉幫助:
import argparse
相關推薦
pthon學習之argparse模組解析
1.建立解析器: import argparse parser = argparse.ArgumentParser( description=’This is a PyMOTW sample program’, ) argparse是一個完整的引
Android FM模組學習之四原始碼解析(三)
由於最近一直忙專案,沒有時間來更新文件,今天抽空來寫一點,希望大家可以學習使用! 這一章當然還是來分析FM模組的原始碼。FmReceiver.java publicFmReceiver(String devicePath,FmRxEvCallbacks
Android FM模組學習之四原始碼解析(四)
我今天想分享的是FM模組的儲存方法,即FmSharedPreferences.java FmSharedPreferences(Context context)在構造方法中載入Load()方法, public void Load(){ Log.d(
Android FM模組學習之四原始碼解析(一)
前一章我們瞭解了FM手動調頻,接下來我們要分析FM模組用到的原始碼。此原始碼是基於高通平臺的,別的平臺都大同小異,只不過是平臺自己作了些小改動而已。 首先要看的當然是主activity,
python學習之argparse模塊
set argument file print red parser test handle rgs 一、簡介: argparse是python用於解析命令行參數和選項的標準模塊,用於代替已經過時的optparse模塊。argparse模塊的作用是用於解析命令行參數,例如p
python學習之argparse模塊的使用
字符 16px 需要 var desc 步驟 rec des int 以下內容主要來自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse 使用
Pthon學習之路 第四篇 Python基礎(二)
pri bsp programs -s alt 如果 lex class 算數運算 1.運算符:+ - *(乘法) /(除法) %(求余) //(求商) **(求冪) 2.成員運算:in not in:判斷單個字符或者子序列在不在字符串中。(n
Python之argparse模組的使用
我們在寫python指令碼的時候,有時候需要在執行的時候傳入引數,而不是寫死在程式裡,這個時候就要用到argparse模組。argparse 是 Python 內建的一個用於命令項選項與引數解析的模組,通過在程式中定義好我們需要的引數,argparse 將會從sys.argv 中解析出這些引數,
C++基礎學習之程式設計模組(4)
函式和二維陣列 在C++中,二維陣列的定義完全與一維陣列不同: int data[3][4] = {{1, 2, 3, 4}, {9, 8, 7, 6}, {2, 4, 6, 8}}; data不能當作是一維陣列的指標然後去訪問12個元素,data[0~2]每個都是一個一維陣列
python學習之-常用模組
json 和pickle 模組 json和pickle模組下都有4個功能 dumps <---> loads (序列化 <--->反序列化) dump <---> load (簡單寫法序列化<---> 簡單寫法反序列化) 用途:序
python學習之-hashlib模組(加密演算法模組)
hash演算法模組內有很多種,如md5、sha1等,只是加密的程度不一樣 hash是一種演算法 該演算法接收傳入的文字內容,經過hash運算得到一串hash值 hash值具備三個特點: 1. 如果傳入的內容相同,得到hash一定相同 2. 不能根據hash值反推出內容(無法反解,但是目前已被破解)
python學習之-re模組(正則表示式模組)
什麼是正則表示式 正則就是用一些具有特殊含義的符號組合到一起(稱為正則表示式)來描述字元或者字串的方法。或者說:正則就是用來描述一類事物的規則。(在Python中)它內嵌在Python中,並通過 re 模組實現。正則表示式模式被編譯成一系列的位元組碼,然後由用 C 編寫的匹配引擎執行。 生活中處處都是正則
python學習之-subprocess模組(子程序模組)
什麼是程序 一個程式執行起來了就是一個程序 但是程式本身不是程序,程式是一對程式碼而已 所以程序就是一個抽象的概念,就是程式執行起來的一個過程 程序和程序之間是相互獨立的,互不影響 如何理解子程序和父程序 抽象的說一個QQ程式是一個父程序,word就是一個子程序,兩個互不干預,當然這只是一個比喻
python學習之pyqt5 模組
python 學習 pyqt5 之安裝的坑 今天開始學習pyqt5,純新手教程,希望能給看到的小夥伴一些幫助,如果我有哪裡有錯誤,也希望大家能多多指正。 我的目標是想學習一下gui ,圖形化介面的東西,本來想學習tkinter,並且用這可模組完成我的專案,後來發
Ansible 學習之常用模組
模組相關命令 (1)列出 ansible 支援的模組 ansible-doc -l (2)檢視該模組的幫助資訊 ansible-doc ping # 檢視 ping 模組的幫助資訊 以下實驗均是在 IP 地址為: 192.168.91.128
Python3.6 模組學習之random模組
random是內建(built-in)函式,作用是產生隨機數 匯入模組: import random接著就可以呼叫random模組下的函數了使用 dir(random)可以檢視random模組下有哪些函式,結果如下:>>> dir(random) ['BP
Python 使用argparse模組解析命令列讀取引數簡介
在多個檔案或者不同語言協同的專案中,python指令碼經常需要從命令列直接讀取引數。萬能的python就自帶了argprase包使得這一工作變得簡單而規範。PS:optparse包是類似的功能,只不過寫起來更麻煩一些。 如果指令碼很簡單或臨時使用,沒有多個複雜的引數選項,可以直接利用sys.argv將指令碼
Deep Learning學習 之 CNN程式碼解析(MATLAB)
MATLAB實現CNN一般會用到deepLearnToolbox-master。但是根據Git上面的說明,現在已經停止更新了,而且有很多功能也不太能夠支援,具體的請大家自習看一看Git中的README。 deepLearnToolbox-master是一個深度
Python的學習之旅———模組與包的使用 常用模組
一:import 匯入模組,只會在第一次匯入時執行原始檔的程式碼 如果模組已經載入到記憶體了,下一次匯入直接引用記憶體中匯入的結果 eval:提取字串內的表示式執行,然後返回執行結果 import 匯入檔案都做了哪些事? 1 以原始檔為準產生一個名稱空間2 以剛剛產生
深度學習之CNN結構解析
LENET5 在1994年,第一個推進深度學習發展的卷積神經網路被提出,即在1988年以來有許多成功的想法被提出以後,由Yann LeCun提出命名的LeNet5。 LeNet5的網路結構是非常基礎的,由於影象特徵是分佈在整個影象上,因此利用卷