如何使用python切換hosts文件
做開發(fā)或測試時常需要切換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.com
172.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', '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()
通過運行add_jing() 和del_jing()兩個函數的方式并不靈活。這里只是通過修改#的方式來切換hosts ,那么你也可以將hosts定義一個數組,直接寫入到HOST文件。通過
寫入不同的數組來達到切換不同hosts的目的。
#coding=utf-8
import os
'''內網測試環(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']
'''外網測試環(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()
上面的方式會更加簡單,把定義的host數組寫到HOST文件中,注意:每寫一個數組元素需要加一個回車換行---write("\n")
如果想繼續(xù)增加切換host的便捷性,可以使用wxPython寫一個host的配置界面出來,那么也就是我們的SwitchHosts 工具了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
使用Python合并PDF文件并添加自定義目錄及頁腳的全過程
在處理文檔時,我們經常遇到需要合并多個PDF文件并添加目錄及頁腳的情況,本文將介紹如何使用Python,特別是PyPDF2和reportlab庫來實現這一功能我們將通過一個實用的示例來演示整個過程,需要的朋友可以參考下2024-03-03
python構造icmp echo請求和實現網絡探測器功能代碼分享
本文分享了二個python示例,python構造icmp echo請求、實現網絡探測器功能代碼,類似nmap功能2014-01-01
python基于exchange函數發(fā)送郵件過程詳解
這篇文章主要介紹了python基于exchange函數發(fā)送郵件過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11
python中Scikit-learn庫的高級特性和實踐分享
Scikit-learn是一個廣受歡迎的Python庫,它用于解決許多機器學習的問題,在本篇文章中,我們將進一步探索Scikit-learn的高級特性和最佳實踐,需要的朋友可以參考下2023-07-07

