用python寫一個專業的傳參腳本

問:linux系統命令如ls,它有幾十個參數,可帶一個或多個參數,可不分前後,用起來是很是的專業。可是本身寫的傳參腳本,通常只傳一個參數,若是傳多個,也是固定的順序,那麼如何用python寫出更專業的傳參腳本呢?python

答:使用python自帶的getopt模塊。linux

 

1、語法:ide

import getopt函數

getopt.getopt(args,shortopts, longopts=[])spa

#函數示例:getopt.getopt(sys.argv[1:],'u:p:P:h',["username=","password=","port=","help"])ip

#輸出格式:[('-p', '123'),('-u', 'root')]  []   #後面中括號包含沒有"-"或"--"的參數get

 

2、參數說明:it

args      全部傳參參數,通常用sys.argv[1:]表示,即全部傳參內容;class

shortopts短格式,通常參數如-u,-p,-h等(一個"-"的)就是短格式;那寫在函數中就是"u:p:P:h",有冒號表明有參數,沒冒號表明沒參數。test

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

username: yangyun

password: 123456

port: 2222

 

長短格式都用:

[root@yang scripts]# python   getopt_test.py  --username=yangyun -p 123456   --port 2222

username: yangyun

password: 123456

port: 2222

 

只傳單個參數,其它是默認值:

[root@yang scripts]# python   getopt_test.py  -p 123456

username: root

password: 123456

port: 22

#此處port與user都用的默認值,默認值在函數裏指定

 

4python傳參腳本實例:

# cat  getopt_test.py

#!/usr/bin/python
#by yangyun 2015-1-11
 
import getopt 
import sys
#導入getopt,sys模塊
 
#定義幫助函數
def help():
        print "Usage error!"
        sys.exit()
 
#輸出用戶名
def username(username):
        print 'username:',username
 
#輸出密碼
def password(password):
        if not password:
                help()
        else:
                print 'password:',password
 
#輸出端口
def port(port):
        print 'port:',port
 
#獲取傳參內容,短格式爲-u,-p,-P,-h,其中-h不須要傳值。
#長格式爲--username,--password,--port,--help,長格式--help不須要傳值。
opts,args=getopt.getopt(sys.argv[1:],'u:p:P:h',["username=","password=","port=","help"])
 
#print opts,'   ' ,args
#設置默認值變量,當沒有傳參時就會使用默認值。
username_value="root"
port_value='22'
password_value=''    #密碼不使用默認值,因此定義空。
 
#循環參數列表,輸出格式爲:[('-p','123'), ('-u', 'root')]     []
 
for opt,value in opts:
        if opt in("-u","--username"):
                username_value=value
                #若是有傳參,則從新賦值。
        if opt in("-p","--password"):
                password_value=value
        if opt in("-P","--port"):
                port_value=value
        if opt in("-h","--help"):
                help()
 
#執行輸出用戶名、密碼、端口的函數,若是有變量沒有傳值,則使用默認值。
username(username_value)
password(password_value)
port(port_value)
相關文章
相關標籤/搜索