日常咱們在用別人寫好的python包的時候,在cmd輸入xx -h就能查看到幫助信息,輸入xx -p 8080就能把參數傳入程序裏,看起來很是酷。
本篇就來說下如何在python代碼里加入命令行參數,而且其它功能,能調用這個參數。python
Python 中也能夠所用 sys 的 sys.argv 來獲取命令行參數:web
sys.argv 是命令行參數列表。chrome
len(sys.argv) 是命令行參數個數。瀏覽器
注:sys.argv[0] 表示腳本名。測試
test.py代碼以下ui
# -*- coding: UTF-8 -*- import sys print '參數個數爲:', len(sys.argv), '個參數。' print '參數列表:', str(sys.argv)
執行以上代碼,輸出結果爲:firefox
$ python test.py arg1 arg2 arg3 參數個數爲: 4 個參數。 參數列表: ['test.py', 'arg1', 'arg2', 'arg3']
getopt模塊是專門處理命令行參數的模塊,用於獲取命令行選項和參數,也就是sys.argv。命令行選項使得程序的參數更加靈活。支持短選項模式(-)和長選項模式(--)。命令行
該模塊提供了兩個方法及一個異常處理(Exception getopt.GetoptError)來解析命令行參數。code
getopt.getopt 方法用於解析命令行參數列表,語法格式以下:blog
getopt.getopt(args, options[, long_options])
參數說明:
args: 要解析的命令行參數列表。
options: 以列表的格式定義,options後的冒號(:)表示該選項必須有附加的參數,不帶冒號表示該選項不附加參數。
long_options: 以字符串的格式定義,long_options 後的等號(=)表示若是設置該選項,必須有附加的參數,不然就不附加參數。
該方法返回值由兩個元素組成: 第一個是 (option, value) 元組的列表。 第二個是參數列表,包含那些沒有'-'或'--'的參數。
假定咱們建立這樣一個腳本,能夠經過命令行向腳本文件傳遞兩個文件名,同時咱們經過另一個選項查看腳本的使用。腳本使用方法以下:
$ python test.py -i
-o
test.py 文件代碼以下所示:
# -*- coding: UTF-8 -*- import sys, getopt def main(argv): inputfile = '' outputfile = '' try: opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="]) except getopt.GetoptError: print('test.py -i <inputfile> -o <outputfile>') sys.exit(2) for opt, arg in opts: if opt == '-h': print('test.py -i <inputfile> -o <outputfile>') sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg elif opt in ("-o", "--ofile"): outputfile = arg print('輸入的文件爲:', inputfile) print('輸出的文件爲:', outputfile) if __name__ == "__main__": main(sys.argv[1:])
執行以上代碼,輸出結果爲:
$ python test.py -h usage: test.py -i <inputfile> -o <outputfile> $ python test.py -i inputfile -o outputfile 輸入的文件爲: inputfile 輸出的文件爲: outputfile
結合selenium測試,好比我想測試chrome瀏覽器,那就在命令行輸入「chrome」參數,想測試firefox瀏覽器的時候,就在命令行輸入「firefox」參數,這樣就能靈活切換不一樣瀏覽器之間的測試了
# 保存爲run.py # coding:utf-8 import sys, getopt from selenium import webdriver import time def main(argv): ''' 命令行傳參 上海-悠悠博客:https://www.cnblogs.com/yoyoketang/ ''' name = "firefox" # 給個默認值 try: # 這裏的 h 就表示該選項無參數,n:表示 n 選項後須要有參數 opts, args = getopt.getopt(argv, "hn:", ["name="]) except getopt.GetoptError: print('Error: test_yoyo.py -n <browsername>') print(' or: test_yoyo.py --name=<browsername>') sys.exit(2) for opt, arg in opts: if opt == "-h": print('test_yoyo.py -n <browsername>') print('or: test_yoyo.py --name=<browsername>') sys.exit() elif opt in ("-n", "--name"): name = arg print('run browser name : %s' % name) return name def browser(n=None): ''' 啓動瀏覽器, n是瀏覽器名稱,支持瀏覽器:chrome ,firefox 上海-悠悠博客:https://www.cnblogs.com/yoyoketang/ ''' if n == None: name = main(sys.argv[1:]) else: name = n if name == "firefox": print("當前執行瀏覽器:%s" % name) return webdriver.Firefox() elif name == "chrome": print("當前執行瀏覽器:%s" % name) return webdriver.Chrome() else: print("支持瀏覽器:chrome,firefox") if __name__ == "__main__": driver = browser() driver.get("https://www.cnblogs.com/yoyoketang/") t = driver.title print(t) time.sleep(10) driver.quit()
cmd執行狀況
C:\Users\admin>d: D:\>cd lianxi D:\lianxi>python run.py -n chrome Input name : chrome 當前執行瀏覽器:chrome DevTools listening on ws://127.0.0.1:54248/devtools/browser/595fe8cf-524d-4599-9 540-2502f6a6f2ca 上海-悠悠 - 博客園 D:\lianxi>python run.py -n firefox Input name : firefox 當前執行瀏覽器:firefox 上海-悠悠 - 博客園
備註:python2在cmd執行時,中文會顯示亂碼,用python3就不會有亂碼了
python自動化交流 QQ羣:779429633