問:linux系統指令如ls,它有幾十個參數,可帶一個或多個參數,可不分先後,用起來是非常的專業。但是自己寫的傳參腳本,一般隻傳一個參數,如果傳多個,也是固定的順序,那麼如何用python寫出更專業的傳參腳本呢?
答:使用python自帶的getopt子產品。
1、文法:
import getopt
getopt.getopt(args,shortopts, longopts=[])
#函數示例:getopt.getopt(sys.argv[1:],'u:p:P:h',["username=","password=","port=","help"])
#輸出格式:[('-p', '123'),('-u', 'root')] [] #後面中括号包含沒有"-"或"--"的參數
2、參數說明:
args 所有傳參參數,一般用sys.argv[1:]表示,即所有傳參内容;
shortopts短格式,一般參數如-u,-p,-h等(一個"-"的)就是短格式;那寫在函數中就是"u:p:P:h",有冒号代表有參數,沒冒号代表沒參數。
longopts 長格式,一般參數如--username,--password,--help等(兩個"-"的)就是長格式;那寫在函數中就是["usrname=",'password=","help"],其中--help是沒有值的,是以沒有等于号。其它有等于号,表示後面需要參數。
3、示範效果:
短格式傳參:
[root@yang scripts]# python getopt_test.py -u yangyun -p 123456 -P 2222
username: yangyun
password: 123456
port: 2222
長格式傳參:(也可以加=号)
[root@yang scripts]# python getopt_test.py --username yangyun --password 123456 --port 2222
長短格式都用:
[root@yang scripts]# python getopt_test.py --username=yangyun -p 123456 --port 2222
隻傳單個參數,其它是預設值:
[root@yang scripts]# python getopt_test.py -p 123456
username: root
port: 22
#此處port與user都用的預設值,預設值在函數裡指定
4、python傳參腳本執行個體:
# cat getopt_test.py