Python命令行參數argv和argparse使用總結

[toc]

概述

運行python腳本時通過命令行方式傳入運行參數通常有以下兩種自建方式:

  • sys.argv - 簡潔
  • argparse - 豐富,可自定義

下面詳細說一下具體時使用

argv

# test_argv.py

import sys

args = sys.argv
print(f'args = {args}')

>>> output
? git:(master) python3 test_argv.py         
args = ['test_argv.py']
? git:(master) ? python3 test_argv.py 1 2 3
args = ['test_argv.py', '1', '2', '3']
? git:(master) ? python3 test_argv.py 1 2 3 'hello world !'
args = ['test_argv.py', '1', '2', '3', 'hello world !']

從上面可以看出闹丐,通過argv方法獲取的結果:

  • 返回為list
  • 第一個參數為腳本本身
  • 如參數中間帶空格童太,用引號即可

argparse

argparse模塊的功能較為豐富蝗肪,其核心是通過add_argument方法自定義入參的:標志析校、格式鳞尔、類型和范圍等特性,常用如下:

  • *name_or_flag - 定義入參名或flag牙咏,如'-n', '--number'
  • type - 指定入參類型
  • choices - 指定入參范圍
  • default - 指定入參默認值
  • required - 指定該餐素是否不要,布爾類型
  • help - 參數概述

更多請參考: argparse

實例

test_argv.py

import argparse

# 初始化一個parser對象
parser = argparse.ArgumentParser(description='test module of argparse')

# 指定-n/--number的參數
# 類型為int
# help為簡短地說明
parser.add_argument(
    '-n', '--number', type=int,
    help='args of number'
)

# 指定-o/--output參數
# 并限制類型為:['txt', 'csv', 'doc']
parser.add_argument(
    '-o', '--output', type=str,
    choices=['txt', 'csv', 'doc'],
    help='output method'
)

# 指定-d/--default參數
# 并限制類型為:['txt', 'csv', 'doc']
parser.add_argument(
    '-d', '--default', type=int,
    choices=[_ for _ in range(1, 10)],
    default=5,
    help='default'
)

# 指定位置參數foo
parser.add_argument('foo')

args = parser.parse_args()
print(f'args = {args}')

# 獲取指定參數
print(
    f'number = {args.number}, type = {type(args.number)}\n'
    f'output = {args.output}, type = {type(args.output)}\n'
    f'default = {args.default}, type = {type(args.default)}\n'
    f'foo = {args.foo}, type = {type(args.foo)}'
)

output

# -h - 打印help
? git:(master) ? python3 test_argv.py -h
usage: test_argv.py [-h] [-n NUMBER] [-o {txt,csv,doc}]
                    [-d {1,2,3,4,5,6,7,8,9}]
                    foo

test module of argparse

positional arguments:
  foo

optional arguments:
  -h, --help            show this help message and exit
  -n NUMBER, --number NUMBER
                        args of number
  -o {txt,csv,doc}, --output {txt,csv,doc}
                        output method
  -d {1,2,3,4,5,6,7,8,9}, --default {1,2,3,4,5,6,7,8,9}
                        default
# 不帶參數運行嘹裂,結果為None
? git:(master) ? python3 test_argv.py   
args = Namespace(number=None, output=None)
number = None
output = None

# 帶參數運行
? git:(master) ? python3 test_argv.py -n 33 --output txt
args = Namespace(number=33, output='txt')
number = 33, type = <class 'int'>
output = txt, type = <class 'str'>

# 參數格式錯誤
? git:(master) ? python3 test_argv.py -n str         
usage: test_argv.py [-h] [-n NUMBER] [-o {txt,csv,doc}]
test_argv.py: error: argument -n/--number: invalid int value: 'str'
? git:(master) ? python3 test_argv.py -o excel       
usage: test_argv.py [-h] [-n NUMBER] [-o {txt,csv,doc}]
test_argv.py: error: argument -o/--output: invalid choice: 'excel' (choose from 'txt', 'csv', 'doc')

# 默認參數 
? git:(master) ? python3 test_argv.py      
args = Namespace(default=5, number=None, output=None)
number = None, type = <class 'NoneType'>
output = None, type = <class 'NoneType'>
output = 5, type = <class 'int'>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末妄壶,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子寄狼,更是在濱河造成了極大的恐慌丁寄,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泊愧,死亡現場離奇詭異伊磺,居然都是意外死亡,警方通過查閱死者的電腦和手機拼卵,發(fā)現死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛮艰,“玉大人腋腮,你說我怎么就攤上這事∪姥粒” “怎么了即寡?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長袜刷。 經常有香客問我聪富,道長,這世上最難降的妖魔是什么著蟹? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任墩蔓,我火速辦了婚禮,結果婚禮上萧豆,老公的妹妹穿的比我還像新娘奸披。我一直安慰自己,他們只是感情好涮雷,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布阵面。 她就那樣靜靜地躺著,像睡著了一般洪鸭。 火紅的嫁衣襯著肌膚如雪样刷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天览爵,我揣著相機與錄音置鼻,去河邊找鬼。 笑死蜓竹,一個胖子當著我的面吹牛沃疮,可吹牛的內容都是我干的盒让。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼司蔬,長吁一口氣:“原來是場噩夢啊……” “哼邑茄!你這毒婦竟也來了?” 一聲冷哼從身側響起俊啼,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肺缕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后授帕,有當地人在樹林里發(fā)現了一具尸體同木,經...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年跛十,在試婚紗的時候發(fā)現自己被綠了彤路。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡芥映,死狀恐怖洲尊,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情奈偏,我是刑警寧澤坞嘀,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站惊来,受9級特大地震影響丽涩,放射性物質發(fā)生泄漏。R本人自食惡果不足惜裁蚁,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一矢渊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枉证,春花似錦昆淡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舞萄,卻和暖如春眨补,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倒脓。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工撑螺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崎弃。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓甘晤,卻偏偏與公主長得像含潘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子线婚,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容