做开发或测试时常需要切换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,hosts,文件
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。