如何使用python切換hosts文件
做開發(fā)或測(cè)試時(shí)常需要切換hosts ,如果hosts比較多,那么頻繁的打開hosts文件對(duì)地址加注釋(#),再把去掉注釋是個(gè)繁瑣的事情。
當(dāng)然,SwitchHosts 已經(jīng)可以幫我們方便的解決了這個(gè)繁瑣的事情。
https://github.com/oldj/SwitchHosts
但筆者還是自己嘗試用python寫個(gè)小程序來(lái)實(shí)現(xiàn)切換。以需求為驅(qū)動(dòng)來(lái)解決日常的問(wèn)題是件非常有意思的事。
假如我們有一組hosts:
172.168.12.107 www.baidu.com
172.168.10.213 account.baidu.com
172.168.12.107 pan.baidu.com
172.168.12.107 passport.baidu.com
172.168.10.129 is.baidu.com
172.168.12.107 un.baidu.com
寫代碼之前想清楚幾點(diǎn)。
1、hosts 文件一般放在我們的C:\WINDOWS\system32\drivers\etc\目錄下,沒(méi)有擴(kuò)展名。我們可以通過(guò)記事本打開。python 的os模塊可以用于打開本地文件。
2、我們要做的操作也很簡(jiǎn)單,加注釋(加#號(hào)),去掉注釋(去掉#號(hào))。去掉注釋時(shí),當(dāng)我打開瀏覽器訪問(wèn)www.baidu.com 時(shí),其實(shí)訪問(wèn)的是本地的,172.168.12.107 主機(jī)。加上注釋時(shí),那么訪問(wèn)的就是真的百度服務(wù)器。
3、我們要做的操作是判斷,每一行數(shù)據(jù)的第一個(gè)字符是否有#號(hào),沒(méi)有的話就加上。
打開python shell 練習(xí)加“#”號(hào)操作
>>> abc = '127.168.10.107 www.baidu.com' >>> a = abc[0] >>> if a != '#': nabc = '#'+abc print nabc #127.168.10.107 www.baidu.com
定義abc字符串,abc[0] 表示取字符串的第一個(gè)字符,判斷是是否為#號(hào),如果不是,就把#號(hào)加到abc字符串的前面。
添加注釋的完整代碼入下:
#coding=utf-8 import os def add_jing(): input = open(r'C:\WINDOWS\system32\drivers\etc\HOSTS', 'r') lines = input.readlines() input.close() output = open(r'C:\WINDOWS\system32\drivers\etc\HOSTS', 'w') for line in lines: if not line: break jing = line[0] if jing != '#': print line nf = '#' + line output.write(nf) else: output.write(line) output.close() if __name__ == "__main__": add_jing()
程序先以讀(r)的方式打開HOST文件,readlines() 方法逐行的讀取內(nèi)容。然后,close()關(guān)閉文件。
程序再以寫(w)的方式打開HOST文件,對(duì)readlines() 獲取的每一行數(shù)據(jù)判斷是否有#號(hào),沒(méi)有的話加上。并通過(guò)write() 方法寫入到HOST文件中。最后close()關(guān)閉文件。
打開python shell 練習(xí)“#”號(hào)操作:
>>> abc = '#127.168.10.107 www.baidu.com' >>> a = abc[0] >>> if a == '#': nabc = abc.replace('#','') print nabc 127.168.10.107 www.baidu.com
同樣取字符串的第一個(gè)字符判斷,如果是#號(hào),那么通過(guò)replace()方法 將#號(hào)替換成空('')
去掉注釋的完整代碼:
def del_jing(): input = open(r'C:\WINDOWS\system32\drivers\etc\HOSTS', 'r') lines = input.readlines() input.close() output = open(r'C:\WINDOWS\system32\drivers\etc\HOSTS', 'w') for line in lines: if not line: break jing = line[0] if jing == '#': print line nf = line.replace('#','') output.write(nf) else: output.write(line) output.close() if __name__ == "__main__": del_jing()
通過(guò)運(yùn)行add_jing() 和del_jing()兩個(gè)函數(shù)的方式并不靈活。這里只是通過(guò)修改#的方式來(lái)切換hosts ,那么你也可以將hosts定義一個(gè)數(shù)組,直接寫入到HOST文件。通過(guò)
寫入不同的數(shù)組來(lái)達(dá)到切換不同hosts的目的。
#coding=utf-8 import os '''內(nèi)網(wǎng)測(cè)試環(huán)境''' insides = ['172.168.12.107 www.baidu.com', '172.168.10.129 pan.baidu.com', '172.168.12.107 un.baidu.com', '172.168.12.107 passport.baidu.com'] '''外網(wǎng)測(cè)試環(huán)境''' outsides = ['172.16.12.223 www.baidu.com', '172.16.10.223 pan.baidu.com', '172.16.12.111 un.baidu.com', '172.16.12.223 passport.baidu.com'] def inside_test(): output = open(r'C:\pyse\HOSTS.txt', 'w') for insid in insides: print insid output.write(insid) output.write("\n") output.close() def outside_test(): output = open(r'C:\pyse\HOSTS.txt', 'w') for outsid in outsides: print outsid output.write(outsid) output.write("\n") output.close() if __name__ == "__main__": #inside_test() outside_test()
上面的方式會(huì)更加簡(jiǎn)單,把定義的host數(shù)組寫到HOST文件中,注意:每寫一個(gè)數(shù)組元素需要加一個(gè)回車換行---write("\n")
如果想繼續(xù)增加切換host的便捷性,可以使用wxPython寫一個(gè)host的配置界面出來(lái),那么也就是我們的SwitchHosts 工具了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python合并PDF文件并添加自定義目錄及頁(yè)腳的全過(guò)程
在處理文檔時(shí),我們經(jīng)常遇到需要合并多個(gè)PDF文件并添加目錄及頁(yè)腳的情況,本文將介紹如何使用Python,特別是PyPDF2和reportlab庫(kù)來(lái)實(shí)現(xiàn)這一功能我們將通過(guò)一個(gè)實(shí)用的示例來(lái)演示整個(gè)過(guò)程,需要的朋友可以參考下2024-03-03python構(gòu)造icmp echo請(qǐng)求和實(shí)現(xiàn)網(wǎng)絡(luò)探測(cè)器功能代碼分享
本文分享了二個(gè)python示例,python構(gòu)造icmp echo請(qǐng)求、實(shí)現(xiàn)網(wǎng)絡(luò)探測(cè)器功能代碼,類似nmap功能2014-01-01python基于exchange函數(shù)發(fā)送郵件過(guò)程詳解
這篇文章主要介紹了python基于exchange函數(shù)發(fā)送郵件過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Python使用Rich實(shí)現(xiàn)美化終端顯示效果
Rich庫(kù)的功能就像它的名字一樣,使Python編程更加豐富(rich),用來(lái)幫助開發(fā)者在控制臺(tái)(命令行)輸出中創(chuàng)建豐富、多彩和具有格式化的文本,下面我們就來(lái)了解下它的具體使用吧2024-02-02python操作MySQL數(shù)據(jù)庫(kù)具體方法
堅(jiān)持每天學(xué)一點(diǎn),每天積累一點(diǎn)點(diǎn),作為自己每天的業(yè)余收獲,這個(gè)文章是我在吃飯的期間寫的,利用自己零散的時(shí)間學(xué)了一下python操作MYSQL,所以整理一下。我采用的是MySQLdb操作的MYSQL數(shù)據(jù)庫(kù)。先來(lái)一個(gè)簡(jiǎn)單的例子吧2013-10-10跟老齊學(xué)Python之私有函數(shù)和專有方法
這篇文章是老齊學(xué)Python系列文章的一篇,主要介紹了跟私有函數(shù)和專有方法,需要的朋友可以參考下2014-10-10python中Scikit-learn庫(kù)的高級(jí)特性和實(shí)踐分享
Scikit-learn是一個(gè)廣受歡迎的Python庫(kù),它用于解決許多機(jī)器學(xué)習(xí)的問(wèn)題,在本篇文章中,我們將進(jìn)一步探索Scikit-learn的高級(jí)特性和最佳實(shí)踐,需要的朋友可以參考下2023-07-07