如何使用python切換hosts檔案
做開發或測試時常需要切換hosts ,如果hosts比較多,那麼頻繁的開啟hosts檔案對地址加註釋(#),再把去掉註釋是個繁瑣的事情。
當然,SwitchHosts 已經可以幫我們方便的解決了這個繁瑣的事情。
https://github.com/oldj/SwitchHosts
但筆者還是自己嘗試用python寫個小程式來實現切換。以需求為驅動來解決日常的問題是件非常有意思的事。
假如我們有一組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.com172.168.10.129 is.baidu.com
172.168.12.107 un.baidu.com
寫程式碼之前想清楚幾點。
1、hosts 檔案一般放在我們的C:\WINDOWS\system32\drivers\etc\目錄下,沒有副檔名。我們可以通過記事本開啟。python 的os模組可以用於開啟本地檔案。
2、我們要做的操作也很簡單,加註釋(加#號),去掉註釋(去掉#號)。去掉註釋時,當我開啟瀏覽器訪問www.baidu.com 時,其實訪問的是本地的,172.168.12.107 主機。加上註釋時,那麼訪問的就是真的百度伺服器。
3、我們要做的操作是判斷,每一行資料的第一個字元是否有#號,沒有的話就加上。
開啟python shell 練習加“#”號操作
>>> 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] 表示取字串的第一個字元,判斷是是否為#號,如果不是,就把#號加到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() 方法逐行的讀取內容。然後,close()關閉檔案。
程式再以寫(w)的方式開啟HOST檔案,對readlines() 獲取的每一行資料判斷是否有#號,沒有的話加上。並通過write() 方法寫入到HOST檔案中。最後close()關閉檔案。
開啟python shell 練習“#”號操作:
>>> 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
同樣取字串的第一個字元判斷,如果是#號,那麼通過replace()方法 將#號替換成空('')
去掉註釋的完整程式碼:
def del_jing(): input = 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()
通過執行add_jing() 和del_jing()兩個函式的方式並不靈活。這裡只是通過修改#的方式來切換hosts ,那麼你也可以將hosts定義一個數組,直接寫入到HOST檔案。通過
寫入不同的陣列來達到切換不同hosts的目的。
#coding=utf-8 import os '''內網測試環境''' 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'] '''外網測試環境''' 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()
上面的方式會更加簡單,把定義的host陣列寫到HOST檔案中,注意:每寫一個數組元素需要加一個回車換行---write("\n")
如果想繼續增加切換host的便捷性,可以使用wxPython寫一個host的配置介面出來,那麼也就是我們的SwitchHosts 工具了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。