如何使用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上传package到Pypi(代码简单)
Feb 06 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 Python
解决python中使用plot画图,图不显示的问题
Jul 04 Python
python实现简单多人聊天室
Dec 11 Python
python3 线性回归验证方法
Jul 09 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
Python序列类型的打包和解包实例
Dec 21 Python
如何在django中添加日志功能
Feb 06 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
python合并多个excel文件的示例
Sep 23 Python
python数字图像处理之图像自动阈值分割示例
Jun 28 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
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
基于datagrid框架的查询
2013/04/08 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python实现栈的方法
2015/05/26 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
python获取代码运行时间的实例代码
2018/06/11 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
Python面向对象编程基础实例分析
2020/01/17 Python
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
外企办公室竞聘演讲稿
2013/12/29 职场文书
员工工作表扬信范文
2014/01/13 职场文书
初中体育教学反思
2014/01/14 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
政风行风建设整改方案
2014/10/27 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
烈士陵园观后感
2015/06/08 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
python实现简单的聊天小程序
2021/07/07 Python
MySQL七大JOIN的具体使用
2022/02/28 MySQL
golang语言指针操作
2022/04/14 Golang
css3 选择器
2022/05/11 HTML / CSS