Python3之命令行參數處理


toc

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)
  1. 調用getopt.getopt()會返回兩個列表,第一個列表賦值給opts,第二個列表賦值給args:
    • opts:是 (選項, 選項值) 的元組為一個元素的列表。如果沒有選項值為空字符串
    • args:存放沒用選項單參數的列表。不屬於格式信息的剩余的命令行參數
  2. 使用 sys.argv[1:] 是為過濾第一個參數(第一個參數為Python程序本身)
  3. "hu:" 為定義短格式選項(-)。這里的h和u為兩個選項。"h" 后面沒有 ":" 表示h這個選項沒有選項值,是作為開關選項(比如:有 -h 為顯示幫助信息,沒有 -h 為不顯示幫助信息)。"u:" 后面有 ":" 為必須有選項值
  4. ["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' 若參數重名,則不報錯

添加命令行參數

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM