如何使用python切换hosts文件


Posted in Python onApril 29, 2020

做开发或测试时常需要切换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

'''内网测试环境'''
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 工具了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python生成随机密码
Mar 10 Python
Python实现保证只能运行一个脚本实例
Jun 24 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
Python基础之文件读取的讲解
Feb 16 Python
Python3.5基础之NumPy模块的使用图文与实例详解
Apr 24 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
TensorFlow tensor的拼接实例
Jan 19 Python
Python中os模块功能与用法详解
Feb 26 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 #Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 #Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 #Python
Python通过Pillow实现图片对比
Apr 29 #Python
Python unittest单元测试框架实现参数化
Apr 29 #Python
Python ORM框架Peewee用法详解
Apr 29 #Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 #Python
You might like
简单的过滤字符串中的HTML标记
2006/12/25 PHP
PHP批量生成缩略图的代码
2008/07/19 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
python读取Excel实例详解
2018/08/17 Python
浅谈python常用程序算法
2019/03/22 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
匡威英国官网:Converse英国
2018/12/02 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
创业计划实施的7大步骤
2014/02/05 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
奉献演讲稿范文
2014/05/21 职场文书
任命书标准格式
2015/03/02 职场文书
学校远程教育工作总结
2015/08/11 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书