python如何實現像shell中的case功能
阿新 • • 發佈:2017-11-02
short python3.5 [0 語句 type shell中的 url -- 如何實現 我們知道在shell腳本裏是支持case語句,當位置參數為空時,會提示我們怎麽使用腳本
那麽在python怎麽實現呢?也使用case嗎?
python裏不支持case語句,但是也有實現case的方法。
這裏我們來講講getopt模塊
介紹說是解析命令行操作
下面是getopt格式:
getopt.getopt(args, shortopts, longopts=[])
args指的是當前腳本接收的參數,它是一個列表,可以通過sys.argv獲得
shortopts 是短參數 啥是短參數啊? 類似於 這樣:python test.py -h # 輸出幫助信息
longopts 是長參數 啥是長參數啊? 類似於 這樣:python test.py -help # 輸出幫助信息
返回值
這個函數返回是一個兩元組的列表(復習一下,元組的值是不可修改的!)
下面我寫一個小例子,讓你稍微頓悟一下
因為sys.argv裏的argv[0]是當前腳本的文件名,不需要它去參與,要不然你的選項和選項值無法匹配,問題多多。
假設我要接收一個參數+參數值的選項怎麽辦?
再寫個小例子!
import getopt import sys arg = getopt.getopt(sys.argv[1:],‘-h‘,[‘help‘]) print(arg)
結果如下:
root@Kali:~/python# python3.5 test.py -h ([(‘-h‘, ‘‘)], []) root@Kali:~/python# python3.5 test.py --help ([(‘--help‘, ‘‘)], [])
可以看到已經接收了參數。並且做了處理,為啥我傳入sys.argv[1:]?
1 #!/usr/bin/env python3.5 2 import urllib.request 3 import getopt 4 import sys 5 6 opts,args = getopt.getopt(sys.argv[1:],‘-h-f:-v‘,[‘help‘,‘filename=‘,‘version‘]) 7 for opt_name,opt_value in opts: 8 ifopt_name in (‘-h‘,‘--help‘): 9 print("[*] Help info") 10 exit() 11 if opt_name in (‘-v‘,‘--version‘): 12 print("[*] Version is 0.01 ") 13 exit() 14 if opt_name in (‘-f‘,‘--filename‘): 15 fileName = opt_value 16 print("[*] Filename is ",fileName) 17 # do something 18 exit()
運行測試結果如下:
root@Kali:~/python# python3.5 test.py --filename=test [*] Filename is test root@Kali:~/python# python3.5 test.py --filename= [*] Filename is root@Kali:~/python# python3.5 test.py --help [*] Help info root@Kali:~/python# python3.5 test.py --version [*] Version is 0.01 root@Kali:~/python# python3.5 test.py -v [*] Version is 0.01 root@Kali:~/python# python3.5 test.py -f test [*] Filename is test root@Kali:~/python#
來詳細解釋一下這幾行代碼 首先從短參數名開始。 我定義了‘-h-f:-v‘ 大家發現沒有,在-f後面多了一個":" 這個":"代表了當前參數是有值的,是一個參數名+參數值的參數 如果我再加一個-o: 那麽證明-o後面是可以接收一個值,這個值就是-o的參數值,將會保存到opts變量中。 長參數名的方式和短參數差不多,唯一的區別就是長參數如果要接收值,那必須得在後面加上一個"="
python如何實現像shell中的case功能