【Python】Windows跟随程序启动和关闭系统代理

在这里插入图片描述

前言

在日常使用计算机时,偶尔可能需要配置代理来访问特定的网络资源或进行网络调试。
当在使用mitmproxy 时候,

  • 程序开始前,需要手动打开系统代理;
  • 程序解释后,需要手动关闭系统代理。

这些重复性且没有技术含量工作其实是很冗余且不友好的。
而在 Windows 操作系统中,使用Python编程是很容易去实现在程序启动和关闭时自动配置系统代理。
所以在以前也分享过一篇文章,【Python】通过 Python 设置电脑代理端口
在现在,发现了一个更佳的实现方式,这里做下记录,分享给各位小伙伴!


知识点

模块作用
winproxy通过Python模块函数和命令行编程来实现修改系统代理
atexit程序在退出时的处理器

atexit官方文档:https://docs.python.org/zh-cn/3/library/atexit.html

winproxy 在前面的文章中有做介绍,这里不着重介绍它;
这里主要介绍的是 Python 内置的atexit 模块。


atexit 应用场景

ps:应用场景是网上搬过来的,具体的应用应该根据日常开发中的需要来决定。

在 Python 编程中,我们通常需要确保程序在退出时能够执行一些必要的清理操作,以释放资源或完成其他任务。这就是 atexit 模块发挥作用的地方。以下是 atexit 模块的一些常见应用场景:

  • 资源释放:在程序中打开文件、网络连接或数据库连接等资源时,使用 atexit 来注册清理函数,以确保在程序退出时关闭这些资源,防止资源泄漏。

  • 日志记录:如果程序需要进行详细的日志记录,可以使用 atexit 来注册一个清理函数,以在程序退出时保存或上传日志文件。

  • 临时文件清理:如果程序生成了临时文件,可以使用 atexit 来注册一个清理函数,以在程序退出时删除这些临时文件,以释放磁盘空间。

  • 状态保存:有时需要在程序退出时保存一些状态信息,以便下次程序运行时可以恢复。atexit 可以用于执行状态保存的操作。

  • 子进程或线程管理:如果程序创建了子进程或线程,可以使用 atexit 来注册清理函数,以确保在程序退出时正确终止这些子进程或线程。

  • 网络连接管理:对于涉及网络通信的程序,使用 atexit 来注册清理函数,以在程序退出时关闭网络连接,释放网络资源。

使用

基础使用

在Python中,可以使用atexit模块来注册在程序退出后执行的操作。通过使用atexit模块,可以确保在程序退出时执行特定的操作,以释放资源或完成其他必要的清理工作。

代码释义:
代码定义了一个名为cleanup的清理函数,然后使用atexit.register()方法来注册它。当程序退出时,无论是正常退出还是由于异常退出,都会执行cleanup函数中定义的清理任务。

import atexitdef cleanup():print("Performing cleanup tasks...")# 注册清理函数
atexit.register(cleanup)# 主程序
print("Main program")

程序运行结果如下图所示:
在这里插入图片描述

Python 编程与系统代理配置

在了解atexit的基础使用后,现在来结合winproxy使用。

在这个示例中,使用 winproxy 库来操作 Windows 系统的代理设置。首先定义了 set_proxy 函数,用于设置系统代理。然后,使用 atexit 模块来注册 close_proxy 函数,以确保在程序退出时关闭代理。

部分代码参考我之前分享的一篇文章:【Python】通过 Python 设置电脑代理端口

import atexit
from winproxy import ProxySettingps = ProxySetting()def set_proxy():"""设置系统代理"""ps.enable = Trueps.server = '127.0.0.1:9527'ps.registry_write()print('代理已经打开!')def close_proxy():"""关闭系统代理"""ps.enable = Falseps.registry_write()print('代理已经关闭!')if __name__ == '__main__':# 打开代理set_proxy()# 注册清理函数atexit.register(close_proxy)

总结

通过结合 Python 编程和 atexit 模块,可以实现在程序启动和关闭时自动配置系统代理的功能。
这种方法确保了系统代理的正确使用,同时也展示了 atexit 模块在 Python 编程中的实际应用场景。
不得不说,atexit是个好东西!!!

后话✨✨

本次分享到此结束,
see you~~🐱‍🏍🐱‍🏍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/169832.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端(二十三)——轮询和长轮询

😫博主:小猫娃来啦 😫文章核心:实现客户端与服务器实时通信的技术手段 文章目录 前言轮询技术轮询的概念轮询的实现原理轮询的优缺点轮询的使用场景 长轮询技术长轮询的概念长轮询的实现原理长轮询的优缺点长轮询的使用场景 轮询与…

CDC实时数据同步

一丶CDC实时数据同步介绍 CDC实时数据同步指的是Change Data Capture(数据变更捕获)技术在数据同步过程中的应用。CDC技术允许在数据源发生变化时,实时地捕获这些变化,并将其应用到目标系统中,从而保持数据的同步性。…

FreeRTOS 任务调度和任务的状态

目录 什么是任务调度? FreeRTOS的任务调度规则是怎样的? 抢占式调度运行过程​编辑 时间片调度运行过程​编辑 任务的状态 任务调度和任务的状态案例分析 什么是任务调度? 调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。…

2 第一个Go程序

概述 在上一节的内容中,我们介绍了Go的前世今生,包括:Go的诞生、发展历程、特性和应用领域。从本节开始,我们将正式学习Go语言。Go语言是一种编译型语言,也就是说,Go语言在运行之前需要先进行编译&#xff…

tomcat的负载均衡、动静分离(nginx联动)

动静分离: 访问静态页面和动态页面分开 实现动态和静态页面负载均衡 实验5台虚拟机 一、动态负载均衡 3台虚拟机模拟: 代理服务器:30 tomcat动态页面:21、22 代理服务器: proxy_pass http://tomcat; proxy_set_h…

docker环境,ubuntu18.04安装VTK8.2和PCL1.9.1

下载源码和依赖库 首先下载源码VTK8.2: Download | VTK 下载PCL1.9.1链接:Releases PointCloudLibrary/pcl GitHub 下载好了以后,先安装PCL依赖 sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get instal…

jenkins实践篇(1)——基于分支的自动发布

问题背景 想起初来公司时,我们还是在发布机上直接执行发布脚本来运行和部署服务,并且正式环境和测试环境的脚本都在一起,直接手动操作脚本时存在比较大的风险就是将环境部署错误,并且当时脚本部署逻辑还没有检测机制,…

unity脚本_Mathf和Math c#

首先创建一个脚本 当我们要做一个值趋近于一个值变化时 可以用Mathf.Lerp(start,end,time);方法实现 比如物体跟随

Plooks大型视频在线一起看网站源码

在前段时间,因为想和异地的朋友一起看电影,但是发现有电影的地方没有一起看功能,有一起看功能的视频网站没有电影,所以就想自己做一个一起看网站,于是就有了Plooks。 Plooks是一个完整的视频网站,其中包括…

Java中配置RabbitMQ基本步骤

在Java中配置RabbitMQ&#xff0c;需要遵循以下步骤&#xff1a; 1.添加依赖 在项目的pom.xml文件中添加RabbitMQ的Java客户端依赖&#xff1a; <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><versio…

BurpSuite安装

下载 BurpSuite 下载 Java17 下载后确定版本 java -version获取启动器 密钥生成器 破解 将下载的 BurpSuite、启动器、密钥生成器&#xff0c;放入同一个目录 打开 CMD 进入该目录 启动密钥生成器 java -jar burp-keygen-scz.jar开启新的CMD&#xff0c;进入该目录 启动…

uniapp: 本应用使用HBuilderX x.x.xx 或对应的cli版本编译,而手机端SDK版本是 x.x.xx。不匹配的版本可能造成应用异常。

文章目录 前言一、原因分析二、解决方案2.1、方案一&#xff1a;更新HbuilderX版本2.2、方案二&#xff1a;设置固定的版本2.3、方案三&#xff1a;忽略版本&#xff08;不推荐&#xff09; 三、总结四、感谢 前言 项目场景&#xff1a;示例&#xff1a;通过使用HbuilderX打包…

WPF中的绑定知识详解(含案例源码分享)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【QT】信号和槽

一、前置示例代码 main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv); // 应用程序对象a&#xff0c;在Qt中&#xff0c;应用程序对象&#xff0c;有且仅有一个。Widget w; // 窗口对…

Centos8 降低gcc版本至gcc-7.3

1 首先卸载系统中的gcc sudo yum remove gcc 2 重新安装gcc-7.3 sudo dnf group install “Development Tools” 然后再次卸载gcc sudo yum remove gcc 然后发现centos-release-scl-rh已经安装了 sudo yum install centos-release-scl-rh yum -y install devtoolset-7-gcc dev…

docker、docker-compose安装教程,很详细

docker、docker-compose安装教程&#xff0c;很详细 一、卸载旧版1、查看有没有安装过旧版2、停止docker3、删除安装过docker的相关包4、删除docker相关的镜像和容器 二、docker安装1、设置阿里云镜像2、查看所有docker3、安装最新版本4、安装指定版本 三、使用前准备1、启动do…

苍穹外卖-01

苍穹外卖-01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名…

关于nacos的配置获取失败及服务发现问题的排坑记录

nacos配置更新未能获取到导致启动报错 排查思路&#xff1a; 1、是否添加了nacos的启动pom依赖 参考&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><…

openEuler 22.03 LTS 安装 Docker CE 和 Dcoker Compose

openEuler 使用 DNF 安装 Docker CE 1024&#xff0c;节日快乐&#xff01;回归正题&#xff0c;DNF 安装 DockerOS 系统环境准备安装 docker-ce 步骤1、更新系统2、安装必要的软件包3、添加 Docker CE 存储库4、更新索引缓存并安装 Docker CE5、启动 Docker 服务6、查看 Docke…

数据挖掘和大数据的区别

数据挖掘 一般用于对企业内部系统的数据库进行筛选、整合和分析。 操作对象是数据仓库&#xff0c;数据相对有规律&#xff0c;数据量较少。 大数据 一般指对互联网中杂乱无章的数据进行筛选、整合和分析。 操作对象一般是互联网的数据&#xff0c;数据无规律&#xff0c;…