如何使用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的Supervisor进行进程监控以及自动启动
May 29 Python
使用python实现BLAST
Feb 12 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
Python3.x爬虫下载网页图片的实例讲解
May 22 Python
快速排序的四种python实现(推荐)
Apr 03 Python
详解python调用cmd命令三种方法
Jul 08 Python
Python:slice与indices的用法
Nov 25 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
Apr 16 Python
Python openpyxl 插入折线图实例
Apr 17 Python
Python爬取网页信息的示例
Sep 24 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 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
从网上搜到的phpwind 0day的代码
2006/12/07 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
文秘自荐信
2014/06/28 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python
分享几个实用的CSS代码块
2022/06/10 HTML / CSS