sys模塊 sys模塊代表了Python解釋器,主要用于獲取和Python解釋器相關的資訊,其中 sys.argv 可以獲取命令列引數
在Python互動式解釋器中可以先匯入sys模塊 import sys,再輸入 dir(sys) 查看sys模塊所包含的全部程式單元(包括變數、函式等),或者 [i for i in dir(sys) if not i.startswith('_')] 過濾掉隱藏的單元
常用單元
- sys.argv:以串列的方式獲取運行 Python 程式的命令列引數存放其中,其中 sys.argv[0] 通常就是指該 Python程式本身,sys.argv[1] 代表第一個引數,sys.argv[2] 代表第二個引數,以此類推,類似于 Shell 中的 $0、$1、$2
import sys
print('程式名稱為:{},第一個引數為:{},第二個引數為:{}'.format(sys.argv[0], sys.argv[1], sys.argv[2]))
sys.byteorder:顯示本地位元組序的指示符,如果本地位元組序的大端模式,則該屬性回傳big,否則回傳little
sys.copyright:該屬性回傳與 Python 解釋器有關的著作權資訊
sys.executable:該屬性回傳 Python 解釋器在磁盤上的存盤路徑
sys.exit():通過引發SystemExit例外來退出程式,將其放在try塊中不能阻止finally塊的執行,
sys.flags:該只讀屬性回傳運行Python命令時指定的旗標
sys.getfilesystemencodiing():回傳在當前系統中保存檔案所用的字符集
sys.getrefcount():回傳指定物件的參考計數,
sys.getrecursionlimit():回傳Python解釋器當前支持的遞回深度,該屬性可通過setrecursionlimit()方法重新設定
sys.getswitchinterval():回傳在當前Python解釋器中執行緒切換的時間間隔,該屬性可通過setswitchinterval()函式改變
sys.implementation:回傳當前Python解釋器的實作
sys.maxsize:回傳Python整數支持的最大值,在32位平臺上,該屬性值為 2 ×× 31-1;在64位平臺上,該屬性值為 2 ×× 63-1
sys.path:該屬性指定Python查找模塊的路徑串列,程式可通過修改該屬性來動態增加Python加載模塊的路徑
sys.platfrom:回傳Python解釋器所在的平臺的識別符號
sys.stdin:回傳系統的標準輸入流——一個類檔案物件
sys.stdout:回傳系統的標準輸出流——一個類檔案物件
sys.stderr:回傳系統的錯誤輸出流——一個類檔案物件
sys.version:回傳當前Python解釋器的版本資訊
sys.winver:回傳當前Python解釋器的主版本號
sys.copyright:回傳當前Python解釋器的著作權資訊
getopt模塊
getopt是對sys.argv獲取的命令列引數進行二次處理,在運行程式時,可能需要根據不同的條件,輸入不同的命令列選項來實作不同的功能,比如 -u 代表后面是用戶,-p 代表后面是密碼,
舉個例子
## fileName: test.py
import sys, getopt
opts, args = getopt.getopt(sys.argv[1:], "hu:", ["help", "file="])
print("opts輸出結果為", opts)
print("args輸出結果為", args)
- 呼叫getopt.getopt()會回傳兩個串列,第一個串列賦值給opts,第二個串列賦值給args:
- opts:是 (選項, 選項值) 的元組為一個元素的串列,如果沒有選項值為空字串
- args:存放沒用選項單引數的串列,不屬于格式資訊的剩余的命令列引數
- 使用 sys.argv[1:] 是為過濾第一個引數(第一個引數為Python程式本身)
- "hu:" 為定義短格式選項(-),這里的h和u為兩個選項,"h" 后面沒有 ":" 表示h這個選項沒有選項值,是作為開關選項(比如:有 -h 為顯示幫助資訊,沒有 -h 為不顯示幫助資訊),"u:" 后面有 ":" 為必須有選項值
- ["help", "file="] 為定義長格式選項(--),這里的 "=" 和上面的短格式選項中的 ":" 一樣 執行的例子
python test.py -h -u root --help --file=file.py file2.py
## 輸出結果
opts輸出結果為 [('-h', ''), ('-u', 'root'), ('--help', ''), ('--file', 'file.py')]
args輸出結果為 ['file2.py']
optparse模塊 optparse模塊主要用來為腳本傳遞命令引數,采用預先定義好的選項來決議命令列引數,自動生成幫助資訊,不需要sys.argv
先簡單寫個例子
import optparse
usage="python %prog -u/--user <target user> -p/--password <target password>"
parser=optparse.OptionParser(usage) ## 寫入上面定義的幫助資訊
parser.add_option('-u', '--user',dest='User',type='string',help='target user', default='root')
parser.add_option('-p','--password',dest='Pwd',type='string',help='target password')
options, args=parser.parse_args()
print('options為', options)
print("用戶名為", options.User)
print("密碼為", options.Pwd)
print('args為', args)
add_option引數:
- 可以設定多個選項字串,比如上面的 '-u', '--user' 這兩個,用的時候任選其一
- dest用于定義選項值存放的位置,作為后面的第一個字典(options)的鍵,值為命令輸入的引數
- type用于檢測命令列輸入引數的資料型別是否符合要求,有 string(字串)、int(整數)、float(浮點數)等型別
- help用于定義幫助資訊
- default設定默認值

幫助資訊里面的選項字串都在一個組中,我們可以創建不同的組用來給選項字串分類
import optparse
usage="python %prog -u/--user <target user> -p/--password <target password>"
parser=optparse.OptionParser(usage) ## 寫入上面定義的幫助資訊
parser.add_option('-u', '--user',dest='User',type='string',help='target user', default='root')
parser.add_option('-p','--password',dest='Pwd',type='string',help='target password')
group = optparse.OptionGroup(parser, 'Debug Options') ## 創建group分組
parser.add_option_group(group) ## 把創建的組添加到parser中
group.add_option('-d', '--debug', action='store_true', help='Print debug information')
options, args=parser.parse_args()
action有三種型別:
- action='store' 默認型別,可以忽略不寫,用戶必須給出一個明確的引數值,該型別定義了將實際引數值保存到dest指定變數中
- action='store_true' 用戶不需給出引數值,該型別定義了將布林值true保存到dest指定的變數中(和上面getopt中不加 ':' 、'=')
- action='store_false' 用戶不需給出引數值,該型別定義了將布林值false保存到dest指定的變數中
argparse模塊
optparse模塊的升級版,optparse被Python2.7和Python3.2棄用,所有有理由相信未來是屬于argparse模塊的
編輯幫助資訊
import argparse
parser = argparse.ArgumentParser(description='幫助描述資訊', prog='程式顯示名稱', usage='頂部顯示資訊,會覆寫prog', epilog='底部顯示資訊') ## 括號里面可以什么都不寫,會走默認
parser.parse_args() ## 命令列引數決議后存放的位置
還有一些不常用的引數:
- add_help = False 禁止顯示幫助界面,只接收引數
- argument_default=argparse.SUPPRESS 限制只能從命令列傳遞引數,程式中指定無效
- allow_abbrev=False 例如--fooo,輸入--foo,則不可以識別引數,默認可以
- conflict_handler='resolve' 若引數重名,則不報錯

添加命令列引數
'''
遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user', dest='User', type=str,default='root', help='target User')
parser.add_argument('-s', '--sex', dest='Sex', type=str, choices=['男', '女'], default='男', help='target Sex')
parser.add_argument('-n', '--number', dest='Num', nargs=2, required=True,type=int, help='target Two Numbers')
print(parser.parse_args()) ## 字典的方式接收引數
引數大多數和上面的optparse相同,不同的有:
- choices:設定引數的范圍,如果choice中的型別不是字串,要指定type
- nargs:設定引數接受的個數: ?:表示可有可無 +:表示至少一個 *:表示任意個 數字表示必須是指定數目個
- required:表示該引數是否可以不寫,默認為 False 轉自:https://blog.csdn.net/sinat_38682860/article/details/107934916
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/55135.html
標籤:Python
