1. 程式人生 > >python自動化配置指令碼分析

python自動化配置指令碼分析

python 預設ascii 編碼,需要新增宣告檔案編碼註釋

# -*- coding: utf-8 -*-

OptionParser

模組用於處理命令列引數:
optparse,它功能強大,而且易於使用,可以方便地生成標準的、符合Unix/Posix 規範的命令列說明。
引入

from optparse import OptionParser 

建立OptionParser例項

usage= 'usage: %prog [options] arg' 
version="%prog 1.0"
parser = OptionParser(usage=usage,version
=version)

上面的%prog(自動解析為檔名)
如果使用者沒有提供自定義的使用方法資訊,optparse 會預設使用: “usage: %prog [options]”, 當使用version引數的時候,optparse自動為你的解析器增加–version選項。

add_option()新增可解析命令
引數說明:
* action:工作方式,基本的有三種store、store_false、store_true,預設為store,是將命令列中你在-x 後面的輸入儲存到options字典中對應key的value位置。而store_false和store_true則是將相應的位置置為false和true
* type:型別(儲存型別) 預設為string
* dest:儲存的變數
* default:預設值
* help:幫助資訊

    parser.add_option("-f","--file",dest="filename",type="string",help="print file") 
    parser.add_option("-g","--give",action="store",type="int",dest="give",help="give int")
    parser.add_option("-v", action="store_true", dest="verbose")
    parser.add_option("-q", action="store_false", dest="verbose"
)

之後就是對輸入進行解析啦
(options, args) = parser.parse_args()
輸出有兩個
options,一個物件包含所有選項的值,如,如果–file接受一個字串引數,那麼option.file 將是使用者提供的檔名,如果使用者沒有提供選項值那它就是None.
args,位置引數列表解析後剩下的選項引數
這樣OptionParser就配置完了,舉個小例子
定義了5個命令,-c -f -g -v -q

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from optparse import OptionParser  
import os 
import sys
def main () : 
    usage = "usage: %prog [options] "  
    version="%prog 1.0"
    parser = OptionParser(usage=usage,version=version)  
    parser.add_option("-c", "--config", dest="config",help="read config from CONFIG FILE")  
    parser.add_option("-f","--file",dest="filename",type="string",help="print file") 
    parser.add_option("-g","--give",action="store",type="int",dest="give",help="give int")
    parser.add_option("-v", action="store_true", dest="verbose")
    parser.add_option("-q", action="store_false", dest="verbose")   
    (options, args) = parser.parse_args()
    print options, args
    if options.give:
        print options.give+1
    if options.filename:
        print options.filename
    if not os.path.isfile(options.filename):
        parser.error(options.filename + " is not a file")

if __name__ == "__main__"  : 
    main() 

執行結果

python try2.py -v -f /opt/deploy/bin/temp.txt -g 10
{'give': 10, 'config': None, 'verbose': True, 'filename': '/opt/deploy/bin/temp.txt'} []
11
/opt/deploy/bin/temp.txt

這裡由於都解析了,所以args的輸出是一個空的list。
give的型別定義為int,所以可以進行運算
-v 命令將verbose項置為true

檢視版本號

python try2.py --version
try2.py 1.0

filename非法的時候會返回error

python try2.py -f aaa

{'give': None, 'config': None, 'verbose': None, 'filename': 'aaa'} []
aaa
Usage: try2.py [options]

try2.py: error: aaa is not a file

檢視幫助

python try2.py --help
Usage: try2.py [options]

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -c CONFIG, --config=CONFIG
                        read config from CONFIG FILE
  -f FILENAME, --file=FILENAME
                        print file
  -g GIVE, --give=GIVE  give int
  -v                    
  -q   

沒處理的輸入會存到argvs中

python try2.py -g 10  heiheihei
{'give': 10, 'config': None, 'verbose': None, 'filename': None} ['heiheihei']
11

另外action也可以是自己定義的函式,例如

parser.add_option("-f","--file",action=act(sys.argv[2:]),dest="filename",help="print file")

以上,我們基於OptionParser 寫了個小指令碼,可以解析命令列來獲取資訊,實現我們的效果。

try except

考慮到會存在輸入非法的情況,那麼我們就需要熟練使用判斷異常的程式碼

捕捉某異常

try:
    f = open("file-not-exists", "r")  
except IOError,e:
    print("open exception: %s: %s\n" %(e.errno, e.strerror))

老版本的Python,except語句寫作”except Exception, e”,Python 2.6後應寫作”except Exception as e”。

捕捉全部異常

try:  
      do something 
except: 
      handle except
會捕獲所有異常,包括鍵盤中斷和程式退出請求(用sys.exit()就無法退出程式了,因為異常被捕獲了),因此慎用。

使用
except Exception as e
可以捕獲除與程式退出sys.exit()相關之外的所有異常。

else與finally

else表示如果try中的程式碼沒有引發異常,則會執行else:

try:
    f = open("foo", "r")
except IOError as e:
    ...
else:
    data = f.read()

finally表示無論是否有異常,都將被執行:

try:
    f = open("foo", "r")
except IOError as e:
    ...
finally:
    f.close()

ConfigParser解析配置檔案

函式
-read(filename) 直接讀取檔案內容
-sections() 得到所有的section,並以列表的形式返回
-options(section) 得到該section的所有option
-items(section) 得到該section的所有鍵值對
-get(section,option) 得到section中option的值,返回為string型別
-getint(section,option) 得到section中option的值,返回為int型別
舉個例子吧
首先匯入模組,然後建立一個針對目的檔案的config物件,可以通過該物件讀取配置檔案

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ConfigParser

def main () : 
    config_file="/opt/deploy/bin/temp.conf"
    config=ConfigParser.ConfigParser()
    config.read(config_file)
    hosts = config.get("env","hosts") 
    for host in hosts.split(","):
        print "host",host
    print config.items("example")
    print config.options("example")
if __name__ == "__main__"  : 
    main() 

配置檔案結構

[section1]
option = value

檔案內容

[env]
hosts =192.168.2.1,192.168.2.2,192.168.2.3
heiheihei=hohohoho
[example]
example1=1
example2=2
example3=3

輸出結果

root@aaa# python try3.py
host 192.168.2.1
host 192.168.2.2
host 192.168.2.3
[('example1', '1'), ('example2', '2'), ('example3', '3')]
['example1', 'example2', 'example3']

思路還是很清晰的。跟上面的結合,就是可以將我們需要的section等內容通過指令碼的args傳進來,然後讀檔案相應內容就可以了

ssh

相關推薦

python自動化配置指令碼分析

python 預設ascii 編碼,需要新增宣告檔案編碼註釋 # -*- coding: utf-8 -*- OptionParser 模組用於處理命令列引數: optparse,它功能強大,而且易於使用,可以方便地生成標準的、符合Unix/Po

nginx+tomcat負載均衡配置+python自動化部署指令碼

nginx+tomcat負載均衡配置 1、網路拓撲      2、nginx安裝配置 1.安裝nginx伺服器,實現OSI網路模型第七層(應用層)負載均衡及反向代理:       安裝nginx 1.6.1 stable version,  stable version版

Ubuntu 16.04 163網易源設定(自動化配置指令碼

1、簡介 1.1 介紹     很多時候,為了方便 操作,條件允許的情況下,直接 聯網 進行安裝,但是 系統 所配置的 apt源 配置的 url 地址 並非 國內的,獲取資源很慢,所以 需要 配置成 國內的 源,本人 喜歡 163網易源,根據個人喜好 自行選擇&nb

批量生成python自動化測試指令碼

  先前有家供應商與我們合作開發自動化工程,採用的py unittest作為指令碼執行框架。我發現他們出的指令碼都是挨個手寫的,格式上也是參差不齊。所以有了根據用例表批量生成指令碼的一段小程式碼 供應商提供的測試指令碼 貼一個經刪減修飾後的指令碼程式碼舉例(因原指令碼很難看,我有程式碼整潔強迫症

Centos下Oracle11gR2安裝教程與自動化配置指令碼

# 系統環境準備 ### 開發元件與依賴庫安裝 ![](https://img2020.cnblogs.com/blog/1480358/202010/1480358-20201009234306007-393743556.png) 安裝centos時選擇Server with GUI,右面的可以不勾選

Selenium2+python自動化18-加載Firefox配置

字符 htbox IT info directory 文件路徑 信息 method 原型 前言有小夥伴在用腳本啟動瀏覽器時候發現原來下載的插件不見了,無法用firebug在打開的頁面上繼續定位頁面元素,調試起來不方便 。 加載瀏覽器配置,需要用FirefoxProfile(

python接口自動化12-案例分析(csrfToken)

ext date 如果 header live gen enc utf accep 前言: 有些網站的登錄方式跟前面講的博客園和token登錄會不一樣,把csrfToken放到cookie裏,登錄前後cookie是沒有任何變化的,這種情況下如何繞過前端的驗證碼登錄呢?

python指令碼分析json檔案

少年,想偷懶?那就複製吧:https://github.com/singgel/pythonDemo 1. 概述 JSON (JavaScript Object Notation)是一種使用廣泛的輕量資料格式. Python標準庫中的json模組提供了JSON資料的處理功能. Pyt

【Selenium + Python】 實現 UI 自動化測試_______First自動化測試指令碼

一、自動化測試實施過程基本可以概括為: 1、定位元素,將其儲存起來; 2、對該元素進行操作; 3、對比操作的結果和預期結果是否一致; 二、Selenium 2 的原理: 原理:直接利用瀏覽器的內部介面來操作瀏覽器,對於不同平臺不同瀏覽器,必須依賴瀏覽器內部的Native

Windows&Appium&Java&Python自動化測試-配置開發環境

摘要 本篇博文,主要介紹藉助Appium做移動端自動化測試的開發環境搭建,包括Java和Python Java環境:Appium+Maven+Idea+TestNG+Ngreport Python環境:Appium+Pycharm+Unittest 二、Java環境 用MAVEN建立專案的好處:

Python自動化刷投票指令碼開發程式分享

Python自動化刷投票指令碼開發程式分享 前言 現在部分比賽為了推廣贊助商或者比賽本身,需要參賽隊伍進行網上拉票,甚至票數還會佔一定比例的成績。因此,刷票也就應運而生了。此次我們團隊參加一個比賽,就需要網上投票決出前幾名,作為一位技術人員,當然是得“解決”技術能解決的問題嘛,所以就寫了個刷

Python+Selenium基礎篇之5-第一個完整的自動化測試指令碼

前面文章,我們介紹瞭如何採用XPath表示式去定位網頁元素,在掌握瞭如何抓取或者如何書寫精確的XPath表示式後,我們可以開始寫自己的第一個真正意義上的webui 自動化測試指令碼,就相當於,你在學習Python,如何在控制檯列印Hello,Python! 一樣。    &nb

crontab定時啟動指令碼自動化配置

CRONTAB概念/介紹      crontab命令用於設定週期性被執行的指令。該命令從標準輸入裝置讀取指令,並將其存放於“crontab”檔案中,以供之後讀取和執行。cron 系統排程程序。 可以使用它在每天的非高峰負荷時間段執行作業,或在一週或一月中的不同時段執行。cr

選用python自動化指令碼開發語言(一)

學習點:python和lua都是網遊中游戲最常用的二種指令碼語言。這裡講述的是python。 python程式碼更優雅和美觀,雖然損耗的是一點執行效率。這裡講1個 staf 的概念。staf 是IBM的自動框架。 這裡先講關於這部分的控制端第一層設計,功能對映到物件。 T

本人在python自動化測試編寫指令碼時遇到的一些與python程式設計有關的問題 總結記錄一下【持續更新】

在學校裡學過C語言、C#、Java沒有系統地學習過Python 但是有一些程式設計基礎 所以就直接上手編寫python指令碼了因此,在這個過程中,學習了一段時間後,還是出現了一些和python程式設計有關的疑點和問題,現在在這裡總結記錄一下!1.從.txt檔案中讀取資訊一些網

python自動化運維-Ansible配置執行1

一 環境準備 Python Setuptools Pip(可選) 二 Ansible快速安裝 1 安裝pip:ease_install pip 2 安裝Ansible:pip install ansible 三 Ansibl

python自動化指令碼示例1->圖示進入登入介面、搜尋

第一個自動化指令碼基於selenium+python+pycharm環境 未登入,點選首頁圖示進入登入介面 一、 【 from selenium import webdriver from selenium.webdriver.support.ui import WebD

appium+python 第一次寫自動化測試指令碼(一)

遇到的問題總結:  1.在python中執行第一個測試指令碼的時候出現上圖的報錯,ModuleNotFoundError: No module named 'appium'。    之所以會報這樣的error是因為沒有裝client 。    開啟cmd , 輸入

appium+Python自動化環境配置

環境準備1、jdk2、Android-sdk3、python4、Node.js5、appium6、appium-Python-Client7、.net framework8、selenium9、eclipse1、下載安裝jdk   1)、下載jdk並安裝   2)、 安裝完成

Appium+Python+Pycharm如何建立並執行自動化測試指令碼【真機執行】

二、將測試機連線電腦,手機上會有一些提示,總之都允許就可以了,開始USB除錯模式,之後開啟cmd,輸入adb devices,檢視手機是否成功連線,如下圖所示: 上圖中可以看到,有一臺裝置已經成功連線了電腦; 三、開啟pycharm,新建一個python檔案,