1. 程式人生 > >命令列選項與引數解析(譯)

命令列選項與引數解析(譯)

轉載:http://blog.xiayf.cn/2013/03/30/argparse/

argparse模組作為optparse的一個替代被新增到Python2.7。argparse的實現支援一些不易於新增到optparse以及要求向後不相容API變化的特性,因此以一個新模組新增到標準庫。

與optparse相比較

argparse的API類似於optparse,甚至在很多情況下通過更新所使用的類名和方法名,使用argparse作為一個簡單的替代。然而,有些地方在新增新特性時不能保持直接相容性。

你必須視情況決定是否升級已有的程式。如果你已編寫了額外的程式碼以彌補optparse的侷限,也許你想升級程式以減少你需要維護的程式碼量。若argparse在所有部署平臺上都可用,那麼新的程式應儘可能使用argparse。

設定一個解析器

使用argparse的第一步就是建立一個解析器物件,並告訴它將會有些什麼引數。那麼當你的程式執行時,該解析器就可以用於處理命令列引數。

解析器類是 ArgumentParser 。構造方法接收幾個引數來設定用於程式幫助文字的描述資訊以及其他全域性的行為或設定。

import argparse
parser = argparse.ArgumentParser(description='This is a PyMOTW sample program')

定義引數

argparse是一個全面的引數處理庫。引數可以觸發不同的動作,動作由 add_argument()

 方法的 action 引數指定。 支援的動作包括儲存引數(逐個地,或者作為列表的一部分),當解析到某引數時儲存一個常量值(包括對布林開關真/假值的特殊處理),統計某個引數出現的次數,以及呼叫一個回撥函式。

預設的動作是儲存引數值。在這種情況下,如果提供一個型別,那麼在儲存之前會先把該引數值轉換成該型別。如果提供 dest 引數,引數值就儲存為命令列引數解析時返回的名稱空間物件中名為該 dest 引數值的一個屬性。

解析一個命令列

定義了所有引數之後,你就可以給 parse_args() 傳遞一組引數字串來解析命令列。預設情況下,引數是從 sys.argv[1:] 中獲取,但你也可以傳遞自己的引數列表。選項是使用GNU/POSIX語法來處理的,所以在序列中選項和引數值可以混合。

parse_args() 的返回值是一個名稱空間,包含傳遞給命令的引數。該物件將引數儲存其屬性,因此如果你的引數 dest 是 "myoption",那麼你就可以args.myoption 來訪問該值。

簡單示例

以下簡單示例帶有3個不同的選項:一個布林選項(-a),一個簡單的字串選項(-b),以及一個整數選項(-c)。

import argparse

parser = argparse.ArgumentParser(description='Short sample app')

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'])

有幾種方式傳遞值給單字元選項。以上例子使用了兩種不同的形式,-bval-c val

$ python argparse_short.py
Namespace(a=True, b='val', c=3)

在輸出中與'c'關聯的值是一個整數,因為程式告訴ArgumentParser在儲存之前先轉換該引數。

“長”選項名字,即選項的名字多於一個字元,以相同的方式進行處理。

import argparse

parser = argparse.ArgumentParser(description='Example with 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', '--withargs=3'])

結果也類似:

$ python argparse_long.py
Namespace(noarg=True, witharg='val', witharg2=3)

argparse區別於optparse的一個地方是對非選項引數值的處理。optparse只進行選項解析,而argparse是一個全面的命令列引數解析工具,也處理非選項引數。

import argparse

parser = argparse.ArgumentParser(description='Example with non-optional arguments')

parser.add_argument('count', action="store", type=int)
parser.add_argument('units', action="store")

print parser.parse_args()

在這個例子中,“count”引數是一個整數,“units”引數儲存為一個字串。其中任意一個引數若沒有在命令列中提供,或給定的值不能被轉換為正確的型別,就會報告一個錯誤。

$ python argparse_arguments.py 3 inches

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 int value: 'some'

$ python argparse_arguments.py

usage: argparse_arguments.py [-h] count units
argparse_arguments.py: error: too few arguments

引數動作

argparse內建6種動作可以在解析到一個引數時進行觸發:

store 儲存引數值,可能會先將引數值轉換成另一個數據型別。若沒有顯式指定動作,則預設為該動作。

store_const 儲存一個被定義為引數規格一部分的值,而不是一個來自引數解析而來的值。這通常用於實現非布林值的命令列標記。

store_ture/store_false 儲存相應的布林值。這兩個動作被用於實現布林開關。

append 將值儲存到一個列表中。若引數重複出現,則儲存多個值。

append_const 將一個定義在引數規格中的值儲存到一個列表中。

version 列印關於程式的版本資訊,然後退出

import argparse

parser 
            
           

相關推薦

命令選項引數解析

轉載:http://blog.xiayf.cn/2013/03/30/argparse/ argparse模組作為optparse的一個替代被新增到Python2.7。argparse的實現支援一些不易於新增到optparse以及要求向後不相容API變化的特性,因此以一個新模組新增到標準庫。

命令選項引數解析

argparse模組作為optparse的一個替代被新增到Python2.7。argparse的實現支援一些不易於新增到optparse以及要求向後不相容API變化的特性,因此以一個新模組新增到標準庫。 與optparse相比較 argparse的API類似於optparse,甚至在很多情況下

argparse - 命令選項引數解析

閱讀原文點我 argparse模組作為optparse的一個替代被新增到Python2.7。argparse的實現支援一些不易於新增到optparse以及要求向後不相容API變化的特性,因此以一個新模組新增到標準庫。 與optparse相比較 argparse的API類似於optpars

python-argparse命令選項引數解析

設定一個解析器 使用argparse的第一步就是建立一個解析器物件,並告訴它將會有些什麼引數。那麼當你的程式執行時,該解析器就可以用於處理命令列引數。 解析器類是 ArgumentParser 。

Sqlmap命令引數解析

前言本文轉載自werner-wiki的部落格,便於參考學習(侵權刪)原文地址:https://blog.csdn.net/wn314/article/details/78872828。一、Sqlmap是什麼Sqlmap是開源的自動化SQL注入工具,由Python寫成,具有如下

13.4 argparse--分析命令選項引數功能

本模組主要為了方便實現命令列引數處理,或者分析命令列引數。建立命令列引數分析器:#python 3.4import argparseparser = argparse.ArgumentParser(description='Process some integers.')pr

PHP 底層的執行機制原理解析轉載

我的另一篇文章:PHP底層工作原理  兩篇結合起來看,會更加好理解。 由於本人資料結構方面知識,淺薄,後面的尚未研究 關於 hash table ,這有個文章可以學習:HashTable原理和底層實現 關於 zval 可以研讀這個:入理解PHP7核心之zval  

【C++筆記】Windows通過命令編譯執行c程式 轉載

1.準備 一臺具備c開發環境的Windows。 驗證方式,命令列輸入gcc -v,檢視是否輸出版本資訊。 gcc -v 1 2.寫程式 在E盤建一個資料夾C,在裡面建立一個Hello.c檔案,副檔名是c,內容如下: #include <stdio.h>

SSH連線慢反向解析

在連線apache,ssh,mysql等伺服器時,如果出現連線過慢,可能的原因是dns 的反向查詢。 反向解析是防止假冒的IP連線伺服器,把IP解析成域名,來提高安裝性,看這個IP是否是偽造,這是dns反向查詢的功能之一。 如果在開啟apache,ssh,mysql 等伺服器

spring mvc引數解析 HandlerMethodArgumentResolver

前面分析到WebDataBinderFactory 建立,實際是建立一個ServletRequestDataBinderFactory例項。 解析引數的方法是在父類實現了ModelAttributeMethodProcessor 從圖中可以看出類的繼承關係。

spring mvc引數解析 HandlerMethodArgumentResolver

前面分析了webdatabinder的建立,下面就直接用此類繫結引數和引數型別解析,其中用到了PropertyEditor介面,ConversionService,Formatter。這三個都是用作引數型別轉換的。 如果一直跟著上面的程式碼最終會來到DataBi

Linux網路程式設計--IP地址域名解析DNS

在日常生活中,人們往往知道主機的域名而不知道主機的IP地址,而socket的API均基於IP地址,所以需要使用DNS域名解析伺服器進行解析。 那麼首先簡單介紹一下DNS的原理,DNS伺服器系統是按樹形的結構構造,頂級域名伺服器下分多個二級域名伺服器,二級域名伺

命令工具之Cmder:1入門篇

前置知識 系統:windows7 64位 軟體:Cmder 簡介 cmder是windows下的命令列工具,用來替代windows自帶的cmd。下載地址:http://cmder.net

spring 核心原始碼解析3:AOP如何使用

AOP,面向切面程式設計,是Spring的另一核心。 在剖析AOP的實現原理前,需要先對如何使用AOP做一番探索,本節仍然使用spring boot作為實驗框架。 首先說明AOP的使用場景:日誌記錄,事務記錄等。 即可以看出,AOP的使用方式,採取類似注入

Python 命令之旅 —— 深入 argparse

作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 前言 在第一篇“初探 argparse”的文章中,我們初步掌握了使用 argparse 的四部曲,

Google 開源的 Python 命令庫:深入 fire

作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 一、前言 在第一篇“初探 fire”的文章中,我們初步掌握了使用 fire 的簡單步驟,瞭解了它 Py

Google 開源的 Python 命令庫:深入 fire

作者:HelloGitHub-Prodesire HelloGitHub 的《講解開源專案》系列,專案地址:https://github.com/HelloGitHub-Team/Article 一、前言 在上一篇文章中我們介紹了 fire 的子命令、巢狀命令和屬性訪問等內容,今天我們將繼續深入瞭

Python命令選項引數解析策略

概述 在Python的專案開發過程中,我們有時需要為程式提供一些可以通過命令列進行呼叫的介面。不過,並不是直接使用 command + 當前檔案 就ok的,我們需要對其設定可選的各種各樣的操作型別。所以,這種情況下我們就有必要對傳入的引數進行解析操作。下面就此

命令選項引數解析-getopt函式

在學習Unix/Linux程式設計實踐教程時,編寫練習一些linux命令,需要對命令列引數進行解析,從而接觸到getopt系列函式: 1. getopt() 2. getopt_long() 3.getopt_long_only() 總結如下: Parse c

201403-3命令選項c++,字串處理

試題編號: 201403-3 試題名稱: 命令列選項 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問