1. 程式人生 > 程式設計 >如何使用python切換hosts檔案

如何使用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.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','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 工具了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。