1. 程式人生 > >pthon學習之argparse模組解析

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

Pythonargparse模組的使用

我們在寫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的網路結構是非常基礎的,由於影象特徵是分佈在整個影象上,因此利用卷