从0到1—POC编写基础篇(四)

接着上一篇

cprint 模块


Python内置的 print 函数可以输出任何类型的数据,但有时候输出的内容不够简洁、美观,难以直观地了解程序运行状态。cprint 库就是为了解决这个问题而生的,它可以让Python输出更简洁、更美观。
cprint 库是一个基于装饰器实现的工具,它可以让Python输出更简洁、更美观。cprint库实际上是一个只有一个函数的库,这个函数叫做 cprint,它可以接受多个参数,其中第一个参数是要输出的内容,其他参数是用于设置输出样式的。cprint函数会将第一个参数输出到控制台,并根据其他参数设置输出样式。
如下演示中,可以看到使用非常的简单

pyfiglet 模块

pyfiglet 是一个Python库,用于将普通文本转换为具有艺术感的ASCII字符艺术。它允许你将文本转换为各种独特的字体样式,创建令人惊叹的文本艺术。这个库的名字来源于 "figlet",这是一个用于生成ASCII艺术的程序。
使用方法
1导入库: 首先,你需要导入 pyfiglet 库。

import pyfiglet

2选择字体样式:pyfiglet 支持许多不同的字体样式。你可以从 这里 查看一些可用的字体样式示例。选择一个你喜欢的样式,将其名称作为参数传递给 figlet_format() 函数。

样式链接:http://www.figlet.org/examples.html

3生成ASCII艺术: 使用 figlet_format() 函数将普通文本转换为ASCII艺术。

text = "Hello, ASCII Art!"
font = "slant"  # 选择一个字体样式

ascii_art = pyfiglet.figlet_format(text, font=font)

4输出ASCII艺术: 使用 print() 函数将生成的ASCII艺术文本输出到终端。

print(ascii_art)
import pyfiglet

text = "Beret-SEC"
font = "slant"

ascii_art = pyfiglet.figlet_format(text, font)
print(ascii_art)

在线生成连接:

http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20

增加颜色输出
pyfiglet 生成的 ASCII 艺术文本本身并不支持直接设置颜色。然而,你可以在生成的 ASCII 艺术文本的周围使用 ANSI 转义序列来设置颜色,从而实现在终端中的彩色输出。

text = "Color Test"

for color_code in range(256):
    colored_ascii_art = f"\033[38;5;{color_code}m{text}\033[0m"
    print("颜色编码%d: %s" % (color_code, colored_ascii_art))

text = "Beret-SEC"
font = "slant"
color = "10"  # ANSI颜色代码,10代表绿色

ascii_art = pyfiglet.figlet_format(text, font)
ascii_art = f"\033[38;5;{color}m{ascii_art}\033[0m"
print(ascii_art)

在 Windows 的命令提示符 (cmd) 终端下,ANSI 转义序列默认是被禁用的,因此无法直接在 cmd 中实现彩色输出。
要在 Windows 的 cmd 终端中实现彩色输出,你可以考虑使用 colorama 库。colorama 库允许你在 Windows 终端中使用 ANSI 转义序列来实现颜色和样式的输出。以下是一个使用 colorama 实现彩色输出的示例:
首先,你需要安装 colorama 库:

pip install colorama

然后,在 Python 脚本中使用以下代码:

import pyfiglet
from colorama import init, Fore, Back, Style

# 初始化 colorama 库
init()

text = "BERET-SEC"
font = "big"

ascii_art = pyfiglet.figlet_format(text, font=font)

# 使用 colorama 设置文本颜色为红色,背景颜色为黄色
colored_ascii_art = f"{Fore.RED}{Back.BLACK}{ascii_art}{Style.RESET_ALL}"

print(colored_ascii_art)

colorama 模块


colorama 是一个 Python 库,用于在 Windows 终端下使用 ANSI 转义序列来实现彩色文本和样式输出。以下是使用 colorama 库的基本方法:
1安装 colorama 库: 在使用 colorama 之前,你需要先安装它。你可以使用以下命令来安装:

bashCopy code
pip install colorama

导入并初始化 colorama 库: 在你的代码中导入 colorama 并进行初始化,以便启用 ANSI 转义序列的使用:

from colorama import init
init()

3使用 Fore、Back 和 Style 类来设置颜色和样式: colorama 提供了三个类,分别用于设置文本颜色、背景颜色和文本样式。以下是它们的基本用法:
○Fore:用于设置文本颜色
○Back:用于设置背景颜色
○Style:用于设置文本样式
4例如,Fore.RED 表示设置文本颜色为红色,Back.YELLOW 表示设置背景颜色为黄色,Style.RESET_ALL 表示重置样式设置。

pythonCopy code
from colorama import Fore, Back, Style

print(f"{Fore.RED}Red Text{Style.RESET_ALL}")
print(f"{Back.BLUE}Blue Background{Style.RESET_ALL}")
print(f"{Style.BRIGHT}Bright Text{Style.RESET_ALL}")

5重置颜色和样式: 使用 Style.RESET_ALL 可以重置颜色和样式设置,确保后续输出不受之前的设置影响。

pythonCopy code
from colorama import Fore, Back, Style

print(f"{Fore.RED}Red Text{Style.RESET_ALL} Normal Text")
print(f"{Back.BLUE}Blue Background{Style.RESET_ALL} Normal Background")

通过结合 colorama 和 pyfiglet,你可以在 Windows 终端中实现彩色的 pyfiglet ASCII 艺术输出,就像前面的示例代码所展示的一样。

from colorama import Fore

def main():
    print(Fore.RED + "这是红色的文本" + Fore.RESET)
    print(Fore.GREEN + "这是绿色的文本" + Fore.RESET)
    print(Fore.BLUE + "这是蓝色的文本" + Fore.RESET)
    print(Fore.YELLOW + "这是黄色的文本" + Fore.RESET)
    print(Fore.MAGENTA + "这是洋红色的文本" + Fore.RESET)
    print(Fore.CYAN + "这是青色的文本" + Fore.RESET)

if __name__ == "__main__":
    main()

threading 模块


参考链接:https://www.cnblogs.com/BaiJilang/p/15654849.html
threading库是python的线程模型,利用threading库我们可以轻松实现多线程任务。
关于线程
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。同一个进程内的多个线程可以并发执行,分享进程的资源。
在Python中,我们可以使用threading模块创建和管理线程。以下是一个创建线程的例子:

import threading

def print_numbers():
    for i in range(10):
        print(i)

def print_letters():
    for letter in 'abcdefghij':
        print(letter)

thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)

thread1.start()
thread2.start()

thread1.join()
thread2.join()

在这个例子中,我们创建了两个线程:thread1和thread2。thread1的任务是打印数字0到9,thread2的任务是打印字母'a'到'j'。 我们使用threading.Thread类创建了两个线程对象,并指定了每个线程的目标函数。然后,我们调用了start方法来启动线程。 join方法用于等待线程结束。这是阻塞调用,也就是说,调用join方法的线程(在这个例子中是主线程)会被阻塞,直到被调用join方法的线程(在这个例子中是thread1和thread2)结束。
线程同步
在多线程环境中,多个线程可能需要共享一些资源。例如,多个线程可能需要写入同一个文件或修改同一个内存位置。这可能会引发所谓的竞态条件,其中一个线程的操作可能会影响其他线程的结果。 为了避免竞态条件,我们需要进行线程同步。Python的threading模块提供了多种线程同步的工具,包括锁(Lock)、条件(Condition)、事件(Event)、信号量(Semaphore)等。以下是一个使用锁进行线程同步的例子:

import threading

lock = threading.Lock()
counter = 0

def increase_counter():
    global counter
    with lock:
        counter += 1
        print(counter)

threads = []
for _ in range(10):
    thread = threading.Thread(target=increase_counter)
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()

在这个例子中,我们创建了10个线程,每个线程都会增加共享变量counter的值。为了避免竞态条件,我们使用了一个锁来保护对counter的修改。只有获得了锁的线程才能修改counter,其他试图修改counter的线程将被阻塞,直到锁被释放。 with lock:语句用于自动获取和释放锁。当进入with语句时,锁被自动获取;当退出with语句时,锁被自动释放。这确保了即使在发生异常的情况下,锁也能被正确释放。


Pool 模块

multiprocessing.dummy 模块是 multiprocessing 模块的子模块之一,它提供了一个简化版的多线程 API,允许你使用多线程而不是多进程来执行任务。from multiprocessing.dummy import Pool 语句允许你从 multiprocessing.dummy 模块中导入 Pool 类,以便创建一个线程池。
以下是一个示例,展示如何使用 from multiprocessing.dummy import Pool 来创建一个线程池并执行多线程任务:

pythonCopy code
from multiprocessing.dummy import Pool
import time

def task(n):
    # 模拟一个耗时任务
    time.sleep(1)
    return n * n

def main():
    # 创建一个包含2个线程的线程池
    pool = Pool(2)

    # 创建一个任务列表
    tasks = [1, 2, 3, 4, 5]

    # 使用线程池并行执行任务
    results = pool.map(task, tasks)

    # 关闭线程池
    pool.close()
    pool.join()

    print("任务结果:", results)

if __name__ == "__main__":
    main()

在这个示例中,我们首先从 multiprocessing.dummy 模块中导入 Pool 类。然后,我们创建了一个包含2个线程的线程池。
接着,我们定义了一个 task 函数,它模拟一个耗时任务,接受一个参数并返回该参数的平方。
然后,我们创建了一个任务列表 tasks,包含了要执行的任务。
使用线程池的 map 方法,我们并行执行了任务,并等待所有任务完成。
最后,我们关闭了线程池,并打印了任务的结果。
请注意,multiprocessing.dummy 的用法与 multiprocessing 模块的用法非常相似,但在多线程环境中运行,适用于不需要多进程的多任务处理。


ThreadPoolExecutor 模块

ThreadPoolExecutor 是 Python 标准库 concurrent.futures 模块中的一个类,用于创建线程池以进行并发执行任务。它提供了一种方便的方式来管理线程,使您能够轻松地并行执行多个任务,而无需手动创建和管理线程。
以下是 ThreadPoolExecutor 的主要特点和用法:
1创建线程池:

from concurrent.futures import ThreadPoolExecutor

# 创建一个具有默认线程数的线程池
with ThreadPoolExecutor() as executor:
    # 在这里执行任务

默认情况下,线程池会使用与系统 CPU 核心数相当的线程。
2执行任务:使用 executor.submit() 或 executor.map() 方法来提交任务给线程池。
○executor.submit(fn, *args, **kwargs):将函数 fn 以及其参数 args 和关键字参数 kwargs 提交给线程池,并返回一个 Future 对象,用于获取任务的结果。
○executor.map(fn, *iterables, timeout=None, chunksize=1):将函数 fn 应用于可迭代对象 iterables 中的每个元素,返回一个生成器,可用于获取结果。
3获取任务结果:使用 Future 对象的 result() 方法来获取任务的结果。可以等待任务完成,然后获取结果。

future = executor.submit(some_function, arg1, arg2)

result = future.result() # 阻塞直到任务完成并返回结果

4异常处理:使用 Future 对象的 exception() 方法来处理任务执行期间可能引发的异常。

future = executor.submit(some_function, arg1, arg2)
try:
    result = future.result()
except Exception as e:
    print(f"An exception occurred: {e}")

5关闭线程池:使用 with 语句可以确保在线程池使用完成后自动关闭,释放资源。

with ThreadPoolExecutor() as executor:
    # 执行任务
# 在此处线程池已关闭

ThreadPoolExecutor 是在并发编程中非常有用的工具,它简化了多线程应用程序的开发和管理,可以提高程序的性能和效率。但要小心,过多的线程可能会导致资源竞争和性能下降,因此需要根据具体情况合理选择线程数量。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20.04开机运行java的sh脚本

用到了 rc.local 1、修改 /usr/lib/systemd/system/rc-local.service 在最下面添加 [Install] WantedBymulti-user.target 2、 系统没有 rc.local,需要手动创建 cd /etc vi rc.local在里面写入 /opt/start.sh chmod x /etc/rc.local # 添加可执行权限 chmod x…

基于51单片机空气质量监测报警仿真LCD1602液晶显示( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机空气质量监测报警仿真LCD显示 1. 主要功能:2. 讲解视频:3. 仿真设计:4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接 基于51单片机空气质量监测报警仿真LCD显示( proteus仿真程序设计报告原理图讲解视频…

前端CSS基础10(浮动)

前端CSS基础10(浮动) 浮动元素浮动后的特点浮动后的特点浮动后的影响及解决 浮动布局小练习 浮动 CSS中的浮动是一种布局技术,常用于实现元素的排列和定位。通过使用float属性,可以让元素在页面中左浮动或右浮动,使得…

ubuntu18.04系统编译openwrt21.02.3

搭建ubuntu18.04环境 使用虚拟机安装ubuntu环境网上教程很多,这里不做赘述,主要是安装一些我们在编译openwrt时可能会用到的一些工具环境 sudo apt-get update sudo apt instll libncurses-dev gawk sudo apt-get install build-essential libncurses5…

pytest数据驱动DDT(数据库/execl/yaml)

常见的DDT技术 数据结构: 列表、字典、json串 文件: txt、csv、excel 数据库: 数据库链接 数据库提取 参数化: pytest.mark.parametrize() pytest.fixture() …

2023年图灵奖揭晓,Avi Wigderson成为双冠王

文章目录 Avi Wigderson双冠王个人简介约翰纳什致敬 Avi Wigderson 2024年4月10日,ACM宣布Avi Wigderson为2023年ACM A.M.图灵奖获得者,以表彰他对计算理论的基础性贡献,包括帮助我们重新理解随机性在计算中的作用,以及他在理论计…

第一届长城杯半决赛wp和AWD笔记

目录 AWD 渗透 cfs 单节点1 AWD笔记 AWD工具 文件比较工具 Web漏洞扫描工具 waf工具 代码审计工具 批量网站备份文件泄露扫描工具 cms通杀漏洞的利用 通杀脚本和批量提交flag脚本 防御流程 攻击流程 注意 AWD 解题思路] 首先就是fscan快速扫描对应C段&#xf…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | LCD Number的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | LCD Number的使用及说明 文章编号&#xf…

贪吃蛇的C语言实现

目录 一、游戏流程设计 二、游戏实现原理 2.1如何创建并管理数据 2.2如何实现蛇身移动 2.3如何实现食物随机放置 2.4如何检测按键与调整光标位置 三、源代码 3.1 test.c 3.2 snake.h 3.3 snake.c 一、游戏流程设计 GameStart WelcomeToGame:打印欢迎界面…

架构师系列-消息中间件(九)- RocketMQ 进阶(三)-消费端消息保障

5.2 消费端保障 5.2.1 注意幂等性 应用程序在使用RocketMQ进行消息消费时必须支持幂等消费,即同一个消息被消费多次和消费一次的结果一样,这一点在使用RoketMQ或者分析RocketMQ源代码之前再怎么强调也不为过。 “至少一次送达”的消息交付策略&#xff…

开启医疗数据新纪元:山海鲸可视化智慧医疗解决方案

在数字化浪潮席卷而来的今天,智慧医疗作为医疗行业的创新力量,正以其独特的技术优势,推动着医疗服务的升级和变革。而在这场变革中,山海鲸可视化以其出色的数据可视化能力,为智慧医疗提供了强大的技术支持,…

用Python和Pygame实现简单贪吃蛇游戏

1.pip安装pygame pygam插件安装 pip install 插件名字 # 安装 pip uninstall 插件名字 # 卸载 pip install 插件名字 -i 指定下载的镜像网址 pip show 插件名字 # 查看插件名字 pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple pip show p…

【网络编程】网络编程概念 | TCP和UDP的区别 | UDP数据报套接字编程 | Socket

文章目录 网络编程一、什么是网络编程1.TCP和UDP的区别 二、UDP数据报套接字编程DatagramSocketDatagramPacket回显服务器(echo server) 网络编程 一、什么是网络编程 通过网络,让两个主机之间能够进行通信。基于通信来完成一定的功能。 ​…

MacOS 下gif 文件的几种压缩方法

categories: Tips tags: Tips GIF 写在前面 最近想转换几个 tg 的 tgs 文件到 gif, 然后上传到微信, 所以又涉及到了 gif 的操作了. 工具介绍 安装 brew install imagemagick gifsicleimagemagick 是专业的图像处理工具, gifsicle 是专门处理 gif 的小工具 ,都是开源的. …

C++之AVL树的使用以及原理详解

1.AVL树 1.1AVL树的概念 1.2AVL树的定义 1.3AVL树的插入 1.4AVL树的旋转 1. 右单旋 2. 左单旋 3. 左右双旋 4. 右左双旋 1.5AVL树的验证 1.6AVL的实现 在之前对map/multimap/set/multiset进行了简单的介绍(C之map_set的使用-CSDN博客),…

说说2024年暑期三下乡社会实践工作新闻投稿经验

作为一名在校大学生,我有幸自去年起参与学院组织的暑期大学生三下乡社会实践团活动。这项活动不仅是我们深入基层、服务社会的重要平台,也是展现当代大学生风采、传递青春正能量的有效途径。然而,如何将这些生动鲜活的实践故事、感人至深的瞬间传播出去,让更多人了解并受到启发…

火绒安全的应用介绍

火绒安全软件是一款集成了杀毒、防御和管控功能的安全软件,旨在为用户提供全面的计算机安全保障。以下是火绒安全软件的一些详细介绍: 系统兼容性强:该软件支持多种操作系统,包括Windows 11、Windows 10、Windows 8、Windows 7、…

xgp加速器免费 微软商店xgp用什么加速器

2001年11月14日深夜,比尔盖茨亲自来到时代广场,在午夜时分将第一台Xbox交给了来自新泽西的20岁年轻人爱德华格拉克曼,后者在回忆中说:“比尔盖茨就是上帝。”性能超越顶级PC的Xbox让他们趋之若鹜。2000年3月10日,微软宣…

25-代码随想录第454题.四数相加II

25-代码随想录第454题.四数相加II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] B[j] C[k] D[l] 0。 为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范…

python 笔记ast.literal_eval

1 介绍 ast.literal_eval 是 Python 标准库 ast 模块中的一个函数,用于安全地评估表示 Python 字面量或容器(如列表、字典、元组、集合)的字符串 import ast # 解析并执行一个数字表达式 num ast.literal_eval("3.14") prin…