IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 我用python自制hosts修改神器,组长说你他娘的还真是个天才(附源码) -> 正文阅读

[Python知识库]我用python自制hosts修改神器,组长说你他娘的还真是个天才(附源码)

??欢迎订阅《从实战学python》专栏,用python实现爬虫、办公自动化、数据可视化、人工智能等各个方向的实战案例,有趣又有用!??

更多精品专栏简介点这里

所谓的诗和远方,不过是,要把眼前的苟且,熬过了才有。

前言

哈喽,大家好,我是一条。

相信使用Windows的小伙伴在工作中遇到需要频繁hosts时都非常苦恼。主要有这几个原因:

  • 路径复杂,Windowshosts文件位于C:\Windows\System32\drivers\etc\hosts目录下,不是很好记。
  • 多次修改之后终于记下了,或者在桌面创建快捷方式,但更烦的是需要管理员权限。
  • 有时候只是需要将某一行注释或取消注释,也要打开文件修改。(一条工作中主要就是这种情况)

针对以上痛点,一条自制了一款修改神器,2秒内切换/修改完hosts,可不要小看这两秒,效率是第一生产力,另外这可是个装x神器。

文末有C站内测投票可体验

效果展示

目前主要实现了三个功能,使用方法为win + R 打开命令行窗口,输入文件名(h.py),回车,键盘输入对应功能的数字。

比如需要修改,键盘输入2,在输入要修改的行号即可。

1–查看

2–修改(根据行号增加或者取消注释)

3–新增

话不多说,看下如何实现的。(文末附完整代码)

管理员启动

神器的核心部分,查了一下资料,万能的python果然有能够以管理员权限执行脚本的神器。

就是他——ctypes

主要代码就是这句:

ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

其中有一个参数为__file__,这句代码是获取管理员权限然后重新执行该文件。这个系统命令并不是主程序完成的,而是以管理员身份重新开了一个进程执行系统命令。并有一个自己的控制台。

有了管理员权限后,只要对hosts文件进行读写即可。

查看

读取文件,按行打印即可,为了方便,加了行号。

主要代码

def show():
    lineNum = 1
    with open("C:\Windows\System32\drivers\etc\hosts", "r") as f:
        linesList = f.readlines()
    for i in linesList:
        print(str(lineNum) + " " + i, end="")
        lineNum = lineNum + 1
    input("please press enter exit")

修改

先执行查看,然后输入对用的行号,判断每行开头字符是否是#,是去掉,不是在开头加上。

实现注释/非注释的切换。

主要代码

def edit():
    lineNum=1
    with open("C:\Windows\System32\drivers\etc\hosts", "r") as f:
        linesList=f.readlines()
    for i in linesList:
        print(str(lineNum)+" "+i,end="")
        lineNum =lineNum+1
    lineNumber=int(input("please enter lineNumber:"))
    if(linesList[lineNumber-1].startswith("#")):
        linesList[lineNumber-1]=linesList[lineNumber-1].replace("#","",1)
    else:
        linesList[lineNumber-1]="#"+linesList[lineNumber-1]
    with open("C:\Windows\System32\drivers\etc\hosts", "a+") as f:
        f.truncate(0)
        f.writelines(linesList)

新增

输入你要新增的内容,写入文件即可。

主要代码

def add(addStr):
    with open("C:\Windows\System32\drivers\etc\hosts", "a+") as f:
            f.write(addStr+"\n")
    print(addStr+"\thava add")
    input("please press enter exit")

部署

为了速度达到最快,采用win+R的方式打开,这样即使你在处理复杂的事情,也不用回到桌面,不用打开文件,一触即达!

  • 新建h.py文件
  • 粘贴完整代码,保存文件
  • 将文件放入C:\Windows\System32目录下
  • win + R输入h.py即可打开
  • 键盘输入数字使用相应功能

完整代码

#pip install name 安装
import ctypes, sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False


def add(addStr):
    with open("C:\Windows\System32\drivers\etc\hosts", "a+") as f:
            f.write(addStr+"\n")
    print(addStr+"\thava add")
    input("please press enter exit")

def edit():
    lineNum=1
    with open("C:\Windows\System32\drivers\etc\hosts", "r") as f:
        linesList=f.readlines()
    for i in linesList:
        print(str(lineNum)+" "+i,end="")
        lineNum =lineNum+1
    lineNumber=int(input("please enter lineNumber:"))
    if(linesList[lineNumber-1].startswith("#")):
        linesList[lineNumber-1]=linesList[lineNumber-1].replace("#","",1)
    else:
        linesList[lineNumber-1]="#"+linesList[lineNumber-1]
    with open("C:\Windows\System32\drivers\etc\hosts", "a+") as f:
        f.truncate(0)
        f.writelines(linesList)
    input("please press enter exit")

def show():
    lineNum = 1
    with open("C:\Windows\System32\drivers\etc\hosts", "r") as f:
        linesList = f.readlines()
    for i in linesList:
        print(str(lineNum) + " " + i, end="")
        lineNum = lineNum + 1
    input("please press enter exit")
if __name__ == '__main__':
    if is_admin():
        print("Hosts编辑器\nAuthor:一条coding\nData:2021-08-21\nVersion:0.0.1")
        operateType = input("查看hosts:1\n编辑hosts:2\n新增hosts:3")
        if (operateType == "1"):
            show()
        if (operateType == "2"):
            edit()
        if (operateType == "3"):
            addStr=input("please type your content:")
            add(addStr)
    else:
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

最后

?今天是坚持刷题更文的第36/100天

?各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力

为了回馈各位粉丝,礼尚往来,给大家准备了一条多年积累下来的优质资源,包括 学习视频、面试资料、珍藏电子书等

大家可以评论留言或者私信我领取

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:09:51  更:2021-08-25 12:10:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:08:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码