我們平常工作或學習中使用python大部分都是在寫腳本,那如何能使我們的腳本程序可以像Windows的cmd窗口和Linux的shell窗口一樣,進行任何操作都是通過命令行呢?
python中三個內建模塊用於處理命令行參數:
sys
getopt
optparse
argparse
一、sys命令行參數
sys模塊主要用於獲取和Python解釋器相關的信息,可在Python交互式解釋器中先導入sys模塊 import sys。通過內置函數dir()查詢到模塊內定義的所有名稱,並以一個字符串列表的形式返回。

sys.argv: 以列表的方式獲取運行 Python 程序的命令行參數。其中 ,sys.argv[0] 通常指該 Python程序本身,sys.argv[1]代表第一個參數,sys.argv[2]代表第二個參數,以此類推。
import sys
def start(argv):
print('程序名:',argv[0])
print('第一個參數:',argv[1])
print('第二個參數:',argv[2])
print('第三個參數:',argv[3])
if __name__ == '__main__':
try:
start(sys.argv[0:])
except KeyboardInterrupt:
print("interrupted by user, killing all threads...")
二、getopt命令行參數
getopt是對sys.argv獲取的命令行參數進行二次處理。在運行程序時,可能需要根據不同的條件,輸入不同的命令行選項來實現不同的功能,比如-u代表后面是用戶,-p代表后面是密碼。調用getopt.getopt()會返回兩個列表,第一個列表賦值給opts,第二個列表賦值給args。
opts:是 (選項, 選項值) 的元組為一個元素的列表。如果沒有選項值為空字符串;
args:存放沒用選項單參數的列表。不屬於格式信息的剩余的命令行參數;
import sys,getopt
opts, args = getopt.getopt(sys.argv[1:], "u:p:", ["file="])
print("opts結果為:",opts)
print("args結果為:",args)
參數解釋:使用 sys.argv[1:] 是為過濾第一個參數(第一個參數為Python程序本身) “u:p:” 為定義短格式選項(-)。這里的u和p為兩個選項。“u:p:” 后面有 “:” 必須有選項值。
[“file=”] 為定義長格式選項(--)。這里的 “=” 和上面的短格式選項中的 “:” 一樣,后面必須有選項值。
使用命令: python3 ./getoptdemo.py -u user -p password --file=123.txt 123456

三、optparse命令行參數
optparse模塊主要用來為腳本傳遞命令參數,采用預先定義好的選項來解析命令行參數,與getopt函數不同的是optparse可以自動生成幫助信息。
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)
使用命令:python3 .\optparsedemo.py -h
python3 .\optparsedemo.py -u user -p password

四、argparse命令行參數
argparse是optparse模塊的升級版,與optparse相比,argparse模塊使用更加簡單便捷。
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())
使用命令:python3 .\argparsedemo.py -h
python3 .\argparsedemo.py -n 12 15

argparse.ArgumentParser().add_argument 參數:
可以設置多個選項字符串,比如上面的 ‘-u’, ‘--user’ 這兩個,用的時候任選其一;
type用於檢測命令行輸入參數的數據類型是否符合要求,有 string、int、float等類型;
dest=用於定義選項值存放的位置,作為后面的第一個字典(options)的鍵,值為命令輸入的參數;
help用於定義幫助信息;
default設置默認值;
