如何使用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 22 Python
python中遍历文件的3个方法
Sep 02 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
pytorch: Parameter 的数据结构实例
Dec 31 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 Python
通过python检测字符串的字母
Feb 18 Python
python新式类和经典类的区别实例分析
Mar 23 Python
python实现图像拼接功能
Mar 23 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
python 还原梯度下降算法实现一维线性回归
Oct 22 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在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
2019/08/03 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
Jquery 基础学习笔记
2009/05/29 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
js获取Get值的方法
2016/09/29 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
[20:30]职业巡回赛回顾
2018/08/09 DOTA
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
历史学专业毕业生求职信
2013/09/27 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
四年级语文教学反思
2014/02/05 职场文书
公司担保书范文
2014/05/21 职场文书