[TOC]
## 模塊說明
### 1、定義:
argparse是python標準庫里面用來處理命令行參數的庫,用于代替已經過時的optparse模塊
### 2、位置參數和選項參數:
**位置參數**就是程序根據該參數出現的位置來確定的,如:`[root@openstack_1?/]#?ls?root`?其中`root`是位置參數
**選項參數**是應用程序已經提前定義好的參數,不是隨意指定的,如:`[root@openstack_1?/]#?ls?-l `?,其中`-l `就是ls命令里的一個選項參數
### 3、使用步驟:
(1)import argparse ? ?首先導入模塊
(2)parser = argparse.ArgumentParser() ? ?創建一個解析對象
(3)parser.add_argument() ? ?向該對象中添加你要關注的命令行參數和選項
(4)parser.parse_args() ? ?進行解析
### 4、argparse.ArgumentParser()方法參數:
一般我們只選擇用description這一個選項
* prog=None
程序名
* **description=None**
help時顯示的開始文字
* epilog=None
help時顯示的結尾文字
* parents=[]
若與其他參數的一些內容一樣,可以繼承
* formatter\_class=argparse.HelpFormatter
自定義幫助信息的格式
* prefix\_chars='-'
命令的前綴,默認是‘-’
* fromfile\_prefix\_chars=None
命令行參數從文件中讀取
* argument\_default=None
設置一個全局的選項缺省值,一般每個選項單獨設置
* conflict\_handler='error'
定義兩個add\_argument中添加的選項名字發生沖突時怎么處理,默認處理是拋出異常
* add\_help=True
是否增加-h/--help選項,默認是True)
### 5、add_argument()方法參數用法:
ArgumentParser.add\_argument(nameor flags...\[, action\]\[, nargs\]\[, const\]\[, default\]\[, type\]\[, choices\]\[, required\]\[, help\]\[, metavar\]\[, dest\])
* **name or flags**?:參數有兩種,可選參數和位置參數
* **action:**
解析到一個命令行參數時該如何處理.action有一組固定值可選.但一般默認就行
| action的值 | 功能 |
| --- | --- |
| store | 默認,將參數值保存在options對象里. |
| store_const| 存儲值const指定的常量中 |
| store_false| 布爾選項,賦值False. |
| store_true| 布爾選項,賦值True |
| count| 統計參數出現的次數|
| append| 將此選項的參數存為列表 |
| append_const| 存為列表,會根據const關鍵參數添加 |
* **nargs:**?參數的數量
* **const**?:保存一個常量
* **default**?:默認值
* **type**?:參數類型,默認為str
* **choices** :設置參數值的范圍,如果choices中的類型不是字符串,記得指定type
* **required**?:該選項是否必選,默認為True
* **metaver**:幫助信息中顯示的參數名稱
* **dest**?:參數名
### 6、簡單使用
~~~
import argparse
parse=argparse.ArgumentParser(description='我是幫助信息')
parse.add_argument('-f')
parse.add_argument('-q')
args=parse.parse_args()
#執行-h顯示幫助
>test.py -h
usage: test.py [-h] [-f F] [-q Q]
我是幫助信息
optional arguments:
-h, --help show this help message and exit
-f F
-q Q
~~~
## 重要參數舉例
### name or flags...
必選參數,有可選參數和位置參數兩種。可選參數和位置參數不能同時存在
`-f`和`--file` 這種是可選參數中的短參數和長參數,可以有多個
`filename` 這種是位置參數,只能有一個,且必傳
若沒有指定dest,優先使用長參數做屬性名
1. 可選參數案例:
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument('-f','--file')
args=parse.parse_args()
print('args:',args)
print('args.file:',args.file)
#執行結果
>test.py #不傳參數也不報錯
args: Namespace(file=None)
args.file: None
>test.py -f a.txt #用最后一個參數file做屬性名
args: Namespace(file='a.txt')
args.file: a.txt
~~~
2. 位置參數案例
~~~py
import argparse
parse=argparse.ArgumentParser()
parse.add_argument('file')
args=parse.parse_args()
print('args:',args)
print('args.file:',args.file)
#執行結果
>test.py #不帶位置參數就報錯
usage: test.py [-h] file
test.py: error: the following arguments are required: file
>test.py a.txt #位置參數直接寫,不需要寫參數名
args: Namespace(file='a.txt')
args.file: a.txt
~~~
### dest屬性參數
設置這個選項的value解析出來后放到哪個屬性中
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument("-f",'--file',dest='filename')
args=parse.parse_args()
print('args:',args)
#執行結果:
>test.py -f a.txt #和上例子對比,可以發現不同
args: Namespace(filename='a.txt')
~~~
### action動作參數
action 表示值賦予鍵的方式,默認為store,存儲到對象中
* store_const,值存放在const中:
~~~py
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_const', const=42)
>>> parser.parse_args('--foo'.split())
Namespace(foo=42)
~~~
* store_true和store_false,值存為True或False
```
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.add_argument('--baz', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Namespace(bar=False, baz=True, foo=True)
```
* append:存為列表
```
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])
```
* append_const:存為列表,會根據const關鍵參數進行添加:
```
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--str', dest='types', action='append_const', const=str)
>>> parser.add_argument('--int', dest='types', action='append_const', const=int)
>>> parser.parse_args('--str --int'.split())
Namespace(types=[<type 'str'>, <type 'int'>])
```
* count:統計參數出現的次數
```
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--verbose', '-v', action='count')
>>> parser.parse_args('-vvv'.split())
Namespace(verbose=3)
```
* version:版本
```
>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
>>> parser.parse_args(['--version'])
PROG 2.0
```
### required和type參數
通常-f這樣的選項是可選的,但是如果required=True那么就是必須的了,不輸入就會報錯提醒
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument("-f", required=True,type=int)
args=parse.parse_args()
print('args:',args)
執行結果:
>test.py #不帶參數報錯
usage: test.py [-h] -f F
test.py: error: the following arguments are required: -f
>test.py -f a.txt #參數類型錯誤報錯
usage: test.py [-h] -f F
test.py: error: argument -f: invalid int value: 'a.txt'
>test.py -f 123 #正常的參數類型不報錯
args: Namespace(f=123)
~~~
### choices范圍參數
可設置參數的范圍,如果choice中的類型不是字符串,要指定type
表示該參數能接受的值只能來自某幾個值候選值中,除此之外會報錯,用choice參數即可
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument("-f",choices=['aa','bb'])
args=parse.parse_args()
print('args:',args)
#z執行結果:
>test.py -f qq
usage: test.py [-h] [-f {aa,bb}]
test.py: error: argument -f: invalid choice: 'qq' (choose from 'aa', 'bb')
>test.py -f aa
args: Namespace(f='aa')
~~~
### nargs參數
指定這個參數后面的value有多少個,默認為1
~~~
import argparse
parse=argparse.ArgumentParser()
parse.add_argument("-f",nargs=2)
args=parse.parse_args()
print('args:',args)
#執行結果:
>test.py -f a.txt b.txt
args: Namespace(f=['a.txt', 'b.txt'])
~~~
nargs還可以正則表達式
'*'表示如果有該位置參數輸入的話,之后所有的輸入都將作為該位置參數的值;
‘+’表示讀取至少1個該位置參數。'?'表示該位置參數要么沒有,要么就只要一個。(PS:跟正則表達式的符號用途一致。)
- 基礎部分
- 基礎知識
- 變量
- 數據類型
- 數字與布爾詳解
- 列表詳解list
- 字符串詳解str
- 元組詳解tup
- 字典詳解dict
- 集合詳解set
- 運算符
- 流程控制與循環
- 字符編碼
- 編的小程序
- 三級菜單
- 斐波那契數列
- 漢諾塔
- 文件操作
- 函數相關
- 函數基礎知識
- 函數進階知識
- lambda與map-filter-reduce
- 裝飾器知識
- 生成器和迭代器
- 琢磨的小技巧
- 通過operator函數將字符串轉換回運算符
- 目錄規范
- 異常處理
- 常用模塊
- 模塊和包相關概念
- 絕對導入&相對導入
- pip使用第三方源
- time&datetime模塊
- random隨機數模塊
- os 系統交互模塊
- sys系統模塊
- shutil復制&打包模塊
- json&pickle&shelve模塊
- xml序列化模塊
- configparser配置模塊
- hashlib哈希模塊
- subprocess命令模塊
- 日志logging模塊基礎
- 日志logging模塊進階
- 日志重復輸出問題
- re正則表達式模塊
- struct字節處理模塊
- abc抽象類與多態模塊
- requests與urllib網絡訪問模塊
- 參數控制模塊1-optparse-過時
- 參數控制模塊2-argparse
- pymysql數據庫模塊
- requests網絡請求模塊
- 面向對象
- 面向對象相關概念
- 類與對象基礎操作
- 繼承-派生和組合
- 抽象類與接口
- 多態與鴨子類型
- 封裝-隱藏與擴展性
- 綁定方法與非綁定方法
- 反射-字符串映射屬性
- 類相關內置方法
- 元類自定義及單例模式
- 面向對象的軟件開發
- 網絡-并發編程
- 網絡編程SOCKET
- socket簡介和入門
- socket代碼實例
- 粘包及粘包解決辦法
- 基于UDP協議的socket
- 文件傳輸程序實戰
- socketserver并發模塊
- 多進程multiprocessing模塊
- 進程理論知識
- 多進程與守護進程
- 鎖-信號量-事件
- 隊列與生產消費模型
- 進程池Pool
- 多線程threading模塊
- 進程理論和GIL鎖
- 死鎖與遞歸鎖
- 多線程與守護線程
- 定時器-條件-隊列
- 線程池與進程池(新方法)
- 協程與IO模型
- 協程理論知識
- gevent與greenlet模塊
- 5種網絡IO模型
- 非阻塞與多路復用IO實現
- 帶著目標學python
- Pycharm基本使用
- 爬蟲
- 案例-爬mzitu美女
- 案例-爬小說
- beautifulsoup解析模塊
- etree中的xpath解析模塊
- 反爬對抗-普通驗證碼
- 反爬對抗-session登錄
- 反爬對抗-代理池
- 爬蟲技巧-線程池
- 爬蟲對抗-圖片懶加載
- selenium瀏覽器模擬