如何使用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判断windows系统是32位还是64位的方法
May 11 Python
Python实现统计单词出现的个数
May 28 Python
Python编程中NotImplementedError的使用方法
Apr 21 Python
Python错误处理操作示例
Jul 18 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
python内存动态分配过程详解
Jul 15 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
django 实现简单的插入视频
Apr 07 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
解决python3中os.popen()出错的问题
Nov 19 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
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
详解PHP PDO简单教程
2019/05/28 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
js+h5 canvas实现图片验证码
2020/10/11 Javascript
python模块之paramiko实例代码
2018/01/31 Python
python输入多行字符串的方法总结
2019/07/02 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
电子商务专业学生的自我鉴定
2013/11/28 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
教师专业自荐信
2014/05/31 职场文书
空气环保标语
2014/06/12 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
Python进程间的通信之语法学习
2022/04/11 Python