如何使用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用于url解码和中文解析的小脚本(python url decoder)
Aug 11 Python
Python使用dis模块把Python反编译为字节码的用法详解
Jun 14 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
django用户登录和注销的实现方法
Jul 16 Python
20行python代码实现人脸识别
May 05 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
解决PDF 转图片时丢文字的一种可能方式
Mar 04 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 session会话的安全性分析
2011/09/08 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
javascript闭包的理解和实例
2010/08/12 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
js跳转页面方法总结
2014/01/29 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
《小猫刮胡子》教学反思
2014/02/21 职场文书
幼儿园春季开学寄语
2014/04/03 职场文书
小学德育工作总结2015
2015/05/12 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android