如何使用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基础教程之对象和类的实际运用
Aug 29 Python
Python创建文件和追加文件内容实例
Oct 21 Python
python实现二叉查找树实例代码
Feb 08 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
Python解析多帧dicom数据详解
Jan 13 Python
python 实现线程之间的通信示例
Feb 14 Python
Python包和模块的分发详细介绍
Jun 19 Python
python装饰器代码深入讲解
Mar 01 Python
Python实现归一化算法详情
Mar 18 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
PHP开发的一些注意点总结
2010/10/12 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
JS 树形递归实例代码
2010/05/18 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
vue cli 全面解析
2018/02/28 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
Python logging模块学习笔记
2014/05/24 Python
常用python编程模板汇总
2016/02/12 Python
Python的requests网络编程包使用教程
2016/07/11 Python
python 全局变量的import机制介绍
2017/09/07 Python
浅谈python之新式类
2018/08/12 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
python实现弹跳小球
2019/05/13 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
Python通过文本和图片生成词云图
2020/05/21 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
涉外文秘个人求职的自我评价
2013/10/07 职场文书
自动化系在校本科生求职信
2013/10/23 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
产品包装策划方案
2014/05/18 职场文书
环保标语口号
2014/06/13 职场文书
竞聘自述材料
2014/08/25 职场文书
教师节横幅标语
2014/10/08 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android