Python學習教程:python設置執(zhí)行選項參數(shù)

一 . sys

可以通過sys.argv得到參數(shù)列表粥庄,其中sys.argv[0]是文件名稱岖瑰,此后的列表值是每一個參數(shù)叛买,這里的參數(shù)列表也支持常規(guī)的列表操作

 for data in sys.argv:
 print("第{}個參數(shù)是:{}".format(sys.argv.index(data), data))
--------------------------------------------------------------------------------------
python mark_test.py first second three four -u username
第0個參數(shù)是:mark_test.py
第1個參數(shù)是:first
第2個參數(shù)是:second
第3個參數(shù)是:three
第4個參數(shù)是:four
第5個參數(shù)是:-u
第6個參數(shù)是:username

二 . Argparse

Argparse模塊可以讓人輕松編寫用戶友好的命令行接口,支持自動生成幫助和使用手冊,并在用戶給程序傳入無效參數(shù)時報出錯誤信息

操作流程

I. 導入庫import argparse

II. 初始化解析器parser = argparse.ArgumentParser()

III. 增加參數(shù)parser.add_argument()

IV. 解析參數(shù)args = parser.parse_args()

使用

參數(shù)分為位置參數(shù)和可選參數(shù)锭环,通常會結合使用聪全,分為以下三種情況

1. 布爾型可選參數(shù)

只要指明了--verbose關鍵字,則會將值設為True辅辩,并作出對應響應

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",
 action="store_true")
args = parser.parse_args()
if args.verbose:
 print("verbosity turned on")
-------------------------------------------------------------------------------------------
python mark_test.py 4 --verbose
#verbosity turned on
--------------------------------------------------------------------------------------------
python mark_test.py --ajschahc 2
#usage: mark_test.py [-h] [--verbose]
#mark_test.py: error: unrecognized arguments: --ashjca 1

2. 指定值的可選參數(shù)

指定可選參數(shù)的幾個響應值难礼,只能從指定值從指定參數(shù)值并做處理

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
 help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
 help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
 print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
 print("{}^2 == {}".format(args.square, answer))
else:
 print(answer)
-----------------------------------------------------------------------------------------------
python mark_test.py 4 -v 3
#usage: mark_test.py [-h] [-v {0,1,2}] square
#mark_test.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
-----------------------------------------------------------------------------------------------
python mark_test.py 4 -v 2
#the square of 4 equals 16

3. 指定可選參數(shù)長度(次數(shù))

利用count來通過次數(shù)給定參數(shù)的響應操作,這里還給定了default值是因為默認情況下未指定可選參數(shù)則它將獲取None值玫锋,無法進行數(shù)值比較

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
 help="display a square of a given number")
parser.add_argument("-v", "--verbosity", action="count", default=0,
 help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity >= 2:
 print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity >= 1:
 print("{}^2 == {}".format(args.square, answer))
else:
 print(answer)
--------------------------------------------------------------------------------
python mark_test.py 4 -v
#the square of 4 equals 16
--------------------------------------------------------------------------------
python mark_test.py 4 -vv
#4^2 == 16
如果你依然在編程的世界里迷茫蛾茉,
不知道自己的未來規(guī)劃,
對python感興趣撩鹿,
這里推薦一下我的學習交流圈QQ群:895 797 751谦炬,
里面都是學習python的,

長格式和短格式是可以混合使用的,參考之前的例子键思,更多可參考Argparse

三 . Fire

Python Fire是一個Python庫础爬,只需一次調(diào)用即可將任何Python組件轉(zhuǎn)換為命令行界面 Fire

  1. 安裝

pip install fire

  1. 使用

Fire解析過程較為簡單,在cmd中直接調(diào)用py文件中的函數(shù)吼鳞、變量看蚜、類、實例等等

import fire
def newprint(text):
 print('my '+text)
def newadd(a,b):
 return a + b
fire.Fire() # 只要這一條命令
----------------------------------------------------------------
python cmd.py newprint notebook
#my notebook
----------------------------------------------------------------
python cmd.py newadd 2 3 
#python cmd.py newadd --a 2 --b 3
  • 在函數(shù)中將fire.Fire改為固定的方法或者類名赔桌,則僅執(zhí)行該實例供炎,如果是函數(shù),調(diào)用時則不再需要指定函數(shù)名疾党,類也只需要指明其內(nèi)的函數(shù)名即可
  • 添加多個函數(shù)而非全部調(diào)用可使用
fire.Fire({
 'newadd': newadd,
 'newprint': newprint,
})

使用類名或者構造對象用法大都類似

import fire
class Myclass:
 def __init__(self, name):
 self.name = name
 def nameprint(self, parm):
 print(parm+ ', I am ' + self.name)
fire.Fire(Myclass)
-----------------------------------------------------------------
python cmd.py nameprint Yes --name June
#Yes, I am June

四 . getopt

getopt.getopt(args, options[, long_options])

  • args: 要解析的命令行參數(shù)列表音诫。
  • options : 以字符串的格式定義,options 后的冒號 : 表示如果設置該選項雪位,必須有附加的參數(shù)竭钝,否則就不附加參數(shù)。
  • long_options : 以列表的格式定義茧泪,long_options 后的等號 = 表示該選項必須有附加的參數(shù)蜓氨,不帶冒號表示該選項不附加參數(shù)。
  • 該方法返回值由兩個元素組成: 第一個是 (option, value) 元組的列表队伟。 第二個是參數(shù)列表,包含那些沒有 - 或 – 的參數(shù)幽勒。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys, getopt
def main(argv):
 inputfile = ''
 outputfile = ''
 try:
 opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
 except getopt.GetoptError:
 print 'test.py -i <inputfile> -o <outputfile>'
 sys.exit(2)
 for opt, arg in opts:
 if opt == '-h':
 print 'test.py -i <inputfile> -o <outputfile>'
 sys.exit()
 elif opt in ("-i", "--ifile"):
 inputfile = arg
 elif opt in ("-o", "--ofile"):
 outputfile = arg
 print '輸入的文件為:', inputfile
 print '輸出的文件為:', outputfile
if __name__ == "__main__":
 main(sys.argv[1:])
---------------------------------------------------------------------------
$ python test.py -h
#usage: test.py -i <inputfile> -o <outputfile>
---------------------------------------------------------------------------

$ python test.py -i inputfile -o outputfile
#輸入的文件為: inputfile
#輸出的文件為: outputfile
  • sys.argv[1:]為要處理的參數(shù)列表嗜侮,sys.argv[0]為腳本名,所以用sys.argv[1:]過濾掉腳本名啥容。

伙伴們哪里有不清楚的可以留言哦锈颗!不足之處,也感謝大家補充咪惠。更多的Python學習教程也會繼續(xù)為大家更新击吱!

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市遥昧,隨后出現(xiàn)的幾起案子覆醇,更是在濱河造成了極大的恐慌,老刑警劉巖炭臭,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件永脓,死亡現(xiàn)場離奇詭異,居然都是意外死亡鞋仍,警方通過查閱死者的電腦和手機常摧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人落午,你說我怎么就攤上這事谎懦。” “怎么了溃斋?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵党瓮,是天一觀的道長。 經(jīng)常有香客問我盐类,道長寞奸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任在跳,我火速辦了婚禮枪萄,結果婚禮上,老公的妹妹穿的比我還像新娘猫妙。我一直安慰自己瓷翻,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布割坠。 她就那樣靜靜地躺著齐帚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彼哼。 梳的紋絲不亂的頭發(fā)上对妄,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音敢朱,去河邊找鬼剪菱。 笑死,一個胖子當著我的面吹牛拴签,可吹牛的內(nèi)容都是我干的孝常。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蚓哩,長吁一口氣:“原來是場噩夢啊……” “哼构灸!你這毒婦竟也來了?” 一聲冷哼從身側響起岸梨,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤喜颁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盛嘿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洛巢,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年次兆,在試婚紗的時候發(fā)現(xiàn)自己被綠了稿茉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖漓库,靈堂內(nèi)的尸體忽然破棺而出恃慧,到底是詐尸還是另有隱情,我是刑警寧澤渺蒿,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布痢士,位于F島的核電站,受9級特大地震影響茂装,放射性物質(zhì)發(fā)生泄漏怠蹂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一少态、第九天 我趴在偏房一處隱蔽的房頂上張望城侧。 院中可真熱鬧,春花似錦彼妻、人聲如沸嫌佑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屋摇。三九已至,卻和暖如春幽邓,著一層夾襖步出監(jiān)牢的瞬間炮温,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工颊艳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茅特,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓棋枕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妒峦。 傳聞我的和親對象是個殘疾皇子重斑,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容