由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规范(说明文档的规范写法)