如何使用python切換hosts文件
做開發(fā)或測試時(shí)常需要切換hosts ,如果hosts比較多,那么頻繁的打開hosts文件對地址加注釋(#),再把去掉注釋是個(gè)繁瑣的事情。
當(dāng)然,SwitchHosts 已經(jīng)可以幫我們方便的解決了這個(gè)繁瑣的事情。
https://github.com/oldj/SwitchHosts
但筆者還是自己嘗試用python寫個(gè)小程序來實(shí)現(xiàn)切換。以需求為驅(qū)動來解決日常的問題是件非常有意思的事。
假如我們有一組hosts:
172.168.12.107 www.baidu.com172.168.10.213 account.baidu.com172.168.12.107 pan.baidu.com172.168.12.107 passport.baidu.com172.168.10.129 is.baidu.com172.168.12.107 un.baidu.com
寫代碼之前想清楚幾點(diǎn)。
1、hosts 文件一般放在我們的C:WINDOWSsystem32driversetc目錄下,沒有擴(kuò)展名。我們可以通過記事本打開。python 的os模塊可以用于打開本地文件。
2、我們要做的操作也很簡單,加注釋(加#號),去掉注釋(去掉#號)。去掉注釋時(shí),當(dāng)我打開瀏覽器訪問www.baidu.com 時(shí),其實(shí)訪問的是本地的,172.168.12.107 主機(jī)。加上注釋時(shí),那么訪問的就是真的百度服務(wù)器。
3、我們要做的操作是判斷,每一行數(shù)據(jù)的第一個(gè)字符是否有#號,沒有的話就加上。
打開python shell 練習(xí)加“#”號操作
>>> 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è)字符,判斷是是否為#號,如果不是,就把#號加到abc字符串的前面。
添加注釋的完整代碼入下:
#coding=utf-8import osdef add_jing(): input = open(r’C:WINDOWSsystem32driversetcHOSTS’, ’r’) lines = input.readlines() input.close() output = open(r’C:WINDOWSsystem32driversetcHOSTS’, ’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文件,對readlines() 獲取的每一行數(shù)據(jù)判斷是否有#號,沒有的話加上。并通過write() 方法寫入到HOST文件中。最后close()關(guān)閉文件。
打開python shell 練習(xí)“#”號操作:
>>> abc = ’#127.168.10.107 www.baidu.com’>>> a = abc[0]>>> if a == ’#’: nabc = abc.replace(’#’,’’) print nabc127.168.10.107 www.baidu.com
同樣取字符串的第一個(gè)字符判斷,如果是#號,那么通過replace()方法 將#號替換成空(’’)
去掉注釋的完整代碼:
def del_jing(): input = open(r’C:WINDOWSsystem32driversetcHOSTS’, ’r’) lines = input.readlines() input.close() output = open(r’C:WINDOWSsystem32driversetcHOSTS’, ’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()
通過運(yùn)行add_jing() 和del_jing()兩個(gè)函數(shù)的方式并不靈活。這里只是通過修改#的方式來切換hosts ,那么你也可以將hosts定義一個(gè)數(shù)組,直接寫入到HOST文件。通過
寫入不同的數(shù)組來達(dá)到切換不同hosts的目的。
#coding=utf-8import os’’’內(nèi)網(wǎng)測試環(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)測試環(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:pyseHOSTS.txt’, ’w’) for insid in insides: print insid output.write(insid) output.write('n') output.close()def outside_test(): output = open(r’C:pyseHOSTS.txt’, ’w’) for outsid in outsides: print outsid output.write(outsid) output.write('n') output.close() if __name__ == '__main__': #inside_test() outside_test()
上面的方式會更加簡單,把定義的host數(shù)組寫到HOST文件中,注意:每寫一個(gè)數(shù)組元素需要加一個(gè)回車換行---write('n')
如果想繼續(xù)增加切換host的便捷性,可以使用wxPython寫一個(gè)host的配置界面出來,那么也就是我們的SwitchHosts 工具了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. el-input無法輸入的問題和表單驗(yàn)證失敗問題解決2. vue跳轉(zhuǎn)頁面常用的幾種方法匯總3. XML入門的常見問題(三)4. JavaScript中顏色模型的基礎(chǔ)知識與應(yīng)用詳解5. 不要在HTML中濫用div6. JavaScript快速實(shí)現(xiàn)一個(gè)顏色選擇器7. react腳手架配置代理的實(shí)現(xiàn)8. CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)9. Jquery使用原生AJAX方法請求數(shù)據(jù)10. React實(shí)現(xiàn)一個(gè)倒計(jì)時(shí)hook組件實(shí)戰(zhàn)示例
