由bext安装“异常”引出的话题:Windows上转义字符的工作原理,与ai“闲扯”不经意学习知识点。
(笔记模板由python脚本于2024年07月25日 19:21:13创建,本篇笔记适合喜欢用ai学习的coder翻阅)
-  Python 官网:https://www.python.org/ 
-  Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 
 地址:https://lqpybook.readthedocs.io/
  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
             —— 华罗庚
- My CSDN主页、My HOT博、My Python 学习个人备忘录
- 好文力荐、 老齐教室
 
 
本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/140651356
CSDN质量分查询入口:http://www.csdn.net/qc
- ◆ Windows上转义字符的工作原理
- 1、bext模块
- 2、我的关于\033[xxm的笔记
- 3、ansi转义字符“\033[2J”清屏
- 4、colorama助力windows使用转义字符
- 1. 初始化阶段
- 2. 转义序列的处理
- 3. 输出处理
- 4. 恢复原始状态
 
- 5、python对*.dll中函数的调用
- 6、windows对编程语言不太“亲近”
- 6.1 系统架构和设计哲学
- 6.2 开发工具和库
- 6.3 系统集成和兼容性
- 6.4 社区支持
 
- ...... A I AI AI让学习如虎添翼......
 
◆ Windows上转义字符的工作原理
1、bext模块
- bext
  
 
简单模拟bext
import os
import sys
# 简单的颜色代码映射
COLORS = {
    'black': '30',
    'red': '31',
    'green': '32',
    'yellow': '33',
    'blue': '34',
    'magenta': '35',
    'cyan': '36',
    'white': '37',
}
def clear_screen():
    """清除屏幕"""
    if os.name == 'nt':  # 如果是Windows系统
        os.system('cls')
    else:  # 如果是Linux或Mac系统
        os.system('clear')
def set_color(color):
    """设置文本颜色"""
    if color in COLORS:
        print(f"\033[{COLORS[color]}m", end="")
def reset_color():
    """重置文本颜色"""
    print("\033[0m", end="")
# 使用示例
clear_screen()
set_color('red')
print("这是一段红色的文字。")
reset_color()
set_color('green')
print("这是一段绿色的文字。")
reset_color()
这个代码段定义了几个函数来模拟 bext 的基本功能。clear_screen 函数用于清除终端屏幕,set_color 函数用于设置文本颜色,reset_color 函数用于重置文本颜色到默认状态。
请注意,这段代码可能不适用于所有终端,因为它依赖于ANSI转义序列,有些终端可能不支持这些序列。如果你的终端不支持这些颜色设置,你可能需要查找其他方法来实现相同的功能。
2、我的关于\033[xxm的笔记
- 我关于用\033[转义字符控制颜色的学习笔记
-  我的 Python.color() (Python 色彩打印控制) 
 地址:https://blog.csdn.net/m0_57158496/article/details/123194259
 浏览阅读:5.5k
 点赞:2 收藏:8
 (本篇笔记于2022-02-28 22:46:21首次发布,最后修改于2022-03-03 10:30:03)
 
-  神奇的 \\033 ,让打印出彩 
 地址:https://blog.csdn.net/m0_57158496/article/details/122953893
 浏览阅读:4.1k
 点赞:3 收藏:13
 (本篇笔记于2022-02-15 23:01:54首次发布,最后修改于2022-02-20 13:24:21)
 
-  彩色文字界面尼姆游戏(Python类 + mypycolor 工具协作打造) 
 地址:https://blog.csdn.net/m0_57158496/article/details/126559166
 浏览阅读:2.0k
 点赞:9 收藏:9 评论:15
 (本篇笔记于2022-08-27 16:33:27首次发布,最后修改于2022-10-02 06:56:05)
 
-  随机颜色彩色提示字符串展示 
 地址:https://blog.csdn.net/m0_57158496/article/details/127270228
 浏览阅读:1.0k
 点赞:1 收藏:1 评论:1
 (本篇笔记于2022-10-11 20:00:05首次发布,最后修改于2022-10-11 20:09:15)
 
-  彩色文本日历牌——巧用“秒时间”(时间截时间float才是日期数据传递的最“美”格式) 
 地址:https://blog.csdn.net/m0_57158496/article/details/140164421
 浏览阅读:745
 点赞:8 收藏:9
 (本篇笔记于2024-07-03 23:06:50首次发布,最后修改于2024-07-04 11:50:09)
 
-  文本模式打印彩色直方统计图 
 地址:https://blog.csdn.net/m0_57158496/article/details/127045609
 浏览阅读:660
 点赞:9 收藏:6 评论:14
 (本篇笔记于2022-09-26 00:22:46首次发布,最后修改于2022-10-02 06:53:25)
 
-  彩色文本进度条 
 地址:https://blog.csdn.net/m0_57158496/article/details/133280609
 浏览阅读:326
 收藏:1
 (本篇笔记于2023-09-25 22:32:26首次发布,最后修改于2023-09-26 21:42:35)
 
3、ansi转义字符“\033[2J”清屏
- 清屏转义字符串
  
- windows中,如何设置对“\033[2J”清屏的支持?
 
 在Windows系统中,默认的命令提示符(cmd.exe)和PowerShell可能不完全支持ANSI转义序列,这导致像- \033[2J这样的清屏命令可能不会按预期工作。但是,从Windows 10的版本1607开始,微软为命令提示符增加了对ANSI转义序列的支持。
要启用ANSI转义序列支持,您需要做以下几步:
1、对于Windows 10版本1607及更高版本:
- 打开注册表编辑器:
 按下Win + R键,输入regedit,然后按Enter。
- 导航到以下注册表项:HKEY_CURRENT_USER\Console
- 添加新的DWORD(32位)值: 
  - 在右侧空白处右键点击,选择新建->DWORD(32位)值。
- 命名为VirtualTerminalLevel。
 修改值:
- 双击新创建的VirtualTerminalLevel值。
- 将数值数据设置为1。
- 点击确定。
 重启命令提示符:
- 关闭并重新打开命令提示符窗口。
 现在,您的命令提示符应该能够处理ANSI转义序列,包括\033[2J清屏命令。
 
- 在右侧空白处右键点击,选择
2、对于PowerShell:
  
    
     
      
       
       
         P 
        
       
         o 
        
       
         w 
        
       
         e 
        
       
         r 
        
       
         S 
        
       
         h 
        
       
         e 
        
       
         l 
        
       
         l 
        
       
      
        PowerShell 
       
      
    PowerShell在Windows 10的某些版本中默认支持ANSI转义序列,但是您可以通过以下命令来显式启用它:
$Host.UI.RawUI.BackgroundColor = 'Black'
$Host.UI.RawUI.ForegroundColor = 'White'
$Host.UI.RawUI.FlushInputBuffer()
$Host.UI.RawUI.SetBufferContents($Host.UI.RawUI.GetBufferContents())
然后,您可以在PowerShell中使用ANSI转义序列。
注意事项:
- 对于Windows 10之前的版本,您可能需要使用第三方库如colorama来支持ANSI转义序列。
- 在某些情况下,即使开启了支持,某些ANSI转义序列可能仍然无法工作。这时,您可能需要使用Windows API调用或其他方法来实现清屏等功能。
4、colorama助力windows使用转义字符
  如果您希望使用更简单的方法,并且不介意安装第三方库,colorama库可以自动转换ANSI转义序列,使其在Windows上工作:
from colorama import init
init()
print("\033[2J\033[H")  # 现在应该可以在Windows的命令提示符中清屏
要安装colorama,您可以使用pip:
pip install colorama
- 我问
  
- ai
 当然可以。- colorama库在Windows上工作的原理涉及到几个关键步骤。
以下是其工作原理的简要概述:
1. 初始化阶段
当你调用colorama.init()时,colorama会执行以下操作:
- 重定向标准输出:colorama通过创建一个包装器来重定向标准输出(sys.stdout)和标准错误输出(sys.stderr),这样它就可以捕获所有写入这些流的数据。
- 设置Windows控制台模式:colorama会尝试设置Windows控制台的模式,使其能够处理ANSI转义序列。这涉及到使用Windows API来启用虚拟终端处理(VT处理),类似于前面提到的在注册表中设置VirtualTerminalLevel。
2. 转义序列的处理
- 解析ANSI转义序列:当程序尝试写入包含ANSI转义序列的文本时,colorama的包装器会拦截这些数据。它会解析这些序列,并理解它们的意义(比如设置文本颜色、移动光标等)。
- 转换为Windows API调用:对于不支持ANSI转义序列的Windows版本,colorama会将解析后的ANSI序列转换为相应的Windows API调用。例如,设置文本颜色的ANSI转义序列会被转换为设置控制台前景色或背景色的API调用。
3. 输出处理
- 清理转义序列:在将数据发送到标准输出之前,colorama会从数据中移除ANSI转义序列,因为Windows控制台不需要这些序列来设置样式。
- 设置控制台属性:通过Windows API,colorama会根据解析的ANSI序列来设置控制台属性,比如颜色、光标位置等。
4. 恢复原始状态
- 清理并恢复:当程序结束时,colorama会清理并恢复控制台的原始状态,确保控制台的行为与程序运行前一致。
 以下是colorama库处理ANSI转义序列的简化流程:
import sys
import os
# 假设这是colorama.init()的一部分
class ANSIToWin32:
    def __init__(self):
        self.win32 = None  # 假设这是Windows API接口
    def write(self, text):
        # 解析ANSI转义序列,并转换为Windows API调用
        # 例如,\033[31m -> SetConsoleTextAttribute(RED)
        self.win32.set_console_color('RED')  # 示例代码,非实际API
        # 移除ANSI转义序列
        clean_text = self.strip_ansi_codes(text)
        
        # 写入清理后的文本
        sys.__stdout__.write(clean_text)
    def strip_ansi_codes(self, text):
        # 实现去除ANSI转义序列的逻辑
        return ''.join(filter(lambda x: x not in self.ansi_codes, text))
    @property
    def ansi_codes(self):
        # ANSI转义序列的集合
        return set('\033[')
# 重定向sys.stdout
sys.stdout = ANSIToWin32()
  这个示例非常简化,实际的colorama库要复杂得多,它处理了各种ANSI转义序列,并提供了更健壮的错误处理和兼容性。colorama的源码是开源的,所以你可以直接查看它的实现细节来了解它是如何工作的。
5、python对*.dll中函数的调用
- 我问
  
- ai
 是的,您提到的- .dll文件是 Windows 上的动态链接库文件,它们包含了可以被其他程序或脚本调用的代码和数据。在- colorama的上下文中,这些- .dll文件并不是脚本,而是用来执行底层系统调用的程序组件。
 
 - colorama库在 Windows 上工作时,通常会使用以下几个- .dll文件:- kernel32.dll:这是 Windows 的核心系统库之一,提供了处理内存、输入输出操作和其他核心功能的函数。
- user32.dll:这个库包含了用于创建和管理窗口的用户界面函数。
- advapi32.dll:用于进行高级Windows API操作的库,比如注册表操作和权限管理。
 
colorama 通过以下方式使用这些 .dll 文件:
- ctypes 库:colorama使用 Python 的ctypes库来加载.dll文件并调用它们导出的函数。ctypes是 Python 的一个标准库,它提供了和 C 兼容的数据类型,并允许调用 DLLs 或共享库中的函数。
- Windows API 调用:通过 ctypes,colorama调用这些.dll文件中定义的函数,执行如设置控制台输出颜色、移动光标位置等操作。
以下是一个使用ctypes调用kernel32.dll中函数的简单示例:
import ctypes
# 加载kernel32.dll
kernel32 = ctypes.WinDLL('kernel32')
# 调用kernel32.dll中的函数,例如:SetConsoleTitleA
kernel32.SetConsoleTitleA.argtypes = [ctypes.c_char_p]
kernel32.SetConsoleTitleA.restype = ctypes.c_int
# 设置控制台标题
title = "我的控制台"
kernel32.SetConsoleTitleA(title.encode('utf-8'))
  在这个示例中,我们使用 ctypes 加载了 kernel32.dll,并调用了 SetConsoleTitleA 函数来设置控制台的标题。
  因此,当您看到 colorama 源码中的 .dll 文件时,应该理解为这些文件是 colorama 为了在 Windows 上实现其功能所依赖的系统级组件。colorama 本身并不包含任何 .dll 文件,但它会使用 ctypes 来与这些系统 .dll 文件交互。
6、windows对编程语言不太“亲近”
- 我问
  
- ai
 您的感受是可以理解的。Windows 和 Linux 在对待编程语言和支持开发者方面确实有一些差异,这些差异主要由以下几个因素造成:
6.1 系统架构和设计哲学
- Linux:Linux 系统基于 Unix 设计哲学,它从一开始就非常注重命令行界面和脚本编程。Linux 和 Unix 系统有着深厚的开源文化背景,许多编程语言、工具和库都是首先在 Linux 上开发的。
- Windows:Windows 系统更侧重于图形用户界面(GUI)和商业应用。虽然 Windows 也支持命令行和脚本编程,但它的许多核心功能和服务都是通过专有的 API 提供的,这有时会使得在 Windows 上进行开发比在 Linux 上更具挑战性。
6.2 开发工具和库
- Linux:Linux 拥有广泛的开发工具和库,许多开源项目都是优先考虑 Linux 平台的。开发者通常可以轻松地通过包管理器安装和使用这些工具。
- Windows:虽然 Windows 也在努力提供更好的开发工具支持(例如 Visual Studio、Windows Subsystem for Linux (WSL)),但有时仍然需要额外的配置和依赖来使某些开源工具和库在 Windows 上运行。
6.3 系统集成和兼容性
- Linux:Linux 系统的集成度较高,许多编程语言和工具都是系统的一部分,因此它们之间的兼容性通常很好。
- Windows:Windows 系统需要考虑到向后兼容性,这意味着它必须支持旧版本的软件和硬件。这有时会导致在集成新工具和语言时出现兼容性问题。
6.4 社区支持
- Linux:Linux 拥有一个庞大的开发者社区,许多问题都有现成的解决方案和文档。
- Windows:虽然 Windows 也有一个强大的开发者社区,但对于某些特定于 Linux 的编程任务,可能难以找到同样水平的支持和文档。
然而,值得注意的是,微软近年来在改善 Windows 对开发者友好度方面做出了许多努力。例如,WSL 允许开发者在 Windows 上运行 Linux 环境,从而可以直接使用 Linux 工具和命令行。此外,微软也在积极支持开源项目,并改进了对 Python 等编程语言的支持。
总的来说,虽然 Windows 和 Linux 在某些方面存在差异,但两者都在不断进步,致力于为开发者提供更好的开发体验。选择哪个平台往往取决于具体的项目需求和个人偏好。
… A I AI AI让学习如虎添翼…
- ai让学习如虎添翼💪💪
  
 
 
上一篇: 简单“复盘”我的笔记模板(python脚本自动生成新文章模板,快捷、统一、便宜修正。迅速作文)
下一篇:
我的HOT博:
 
  本次共计收集 311 篇博文笔记信息,总阅读量43.82w。数据于2024年03月22日 00:50:22完成采集,用时6分2.71秒。阅读量不小于6.00k的有 
      
       
        
        
          7 
         
        
       
         7 
        
       
     7篇。
 
-  001 
 标题:让QQ群昵称色变的神奇代码
 (浏览阅读 5.9w )
 地址:https://blog.csdn.net/m0_57158496/article/details/122566500
 点赞:25 收藏:86 评论:17
 摘要:让QQ昵称色变的神奇代码。
 首发:2022-01-18 19:15:08
 最后编辑:2022-01-20 07:56:47
-  002 
 标题:Python列表(list)反序(降序)的7种实现方式
 (浏览阅读 1.1w )
 地址:https://blog.csdn.net/m0_57158496/article/details/128271700
 点赞:8 收藏:35 评论:8
 摘要:Python列表(list)反序(降序)的实现方式:原址反序,list.reverse()、list.sort();遍历,全数组遍历、1/2数组遍历;新生成列表,resersed()、sorted()、负步长切片[::-1]。
 首发:2022-12-11 23:54:15
 最后编辑:2023-03-20 18:13:55
-  003 
 标题:pandas 数据类型之 DataFrame
 (浏览阅读 9.7k )
 地址:https://blog.csdn.net/m0_57158496/article/details/124525814
 点赞:7 收藏:36
 摘要:pandas 数据类型之 DataFrame_panda dataframe。
 首发:2022-05-01 13:20:17
 最后编辑:2022-05-08 08:46:13
-  004 
 标题:个人信息提取(字符串)
 (浏览阅读 8.2k )
 地址:https://blog.csdn.net/m0_57158496/article/details/124244618
 点赞:2 收藏:15
 摘要:个人信息提取(字符串)_个人信息提取python。
 首发:2022-04-18 11:07:12
 最后编辑:2022-04-20 13:17:54
-  005 
 标题:Python字符串居中显示
 (浏览阅读 7.6k )
 地址:https://blog.csdn.net/m0_57158496/article/details/122163023
 评论:1
-  006 
 标题:罗马数字转换器|罗马数字生成器
 (浏览阅读 7.5k )
 地址:https://blog.csdn.net/m0_57158496/article/details/122592047
 摘要:罗马数字转换器|生成器。
 首发:2022-01-19 23:26:42
 最后编辑:2022-01-21 18:37:46
-  007 
 标题:回车符、换行符和回车换行符
 (浏览阅读 6.0k )
 地址:https://blog.csdn.net/m0_57158496/article/details/123109488
 点赞:2 收藏:3
 摘要:回车符、换行符和回车换行符_命令行回车符。
 首发:2022-02-24 13:10:02
 最后编辑:2022-02-25 20:07:40
- 截屏图片
  
 (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)
 
 
精品文章:
- 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
- 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代码编写规范
- Python的docstring规范(说明文档的规范写法)



















