0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

推荐几个不错的Python库

Spinal FPGA 来源:Spinal FPGA 2023-12-16 11:05 次阅读

编 者 按

作为一个在数据中心搬砖的逻辑开发,日常不是仅仅简单的写写RTL就可以完事儿的。在数据中心,你可能连板卡都看不到,日常常打交道的,也就是PCIe。作为逻辑版本的生产者,出现问题往往需要自己有详细的定位手段和方式(没有谁比设计者更清楚逻辑的功能。专门的软件人员来做当然没问题,但增加沟通成本),那么一套自己常用的软件工具还是非常有必要的。对于这种工具型工具,C就显得太笨重了,而Python才是首选。


推荐几个不错的Python库

ctypes
作为常与PCIe打交道的人来说,99%的定位方式都是通过寄存器来进行定位信息。在python中自然也可以通过mmap来实现PCIe Bar空间的映射,但有一个问题就是Python下的mmap一次读或者写有时往往会产生两次TLP读写。这么高深的问题自然逻辑开发人员是解不了的。那这时候最好的方式就是通过ctypes来实现与C的打通,mmap与寄存器读写功能API交给C代码来做,生成.so后Python通过ctypes来实现调用即可,方便简洁。

rich

linux环境里,基本上就是一个命令行窗口,那么基本上就是各种打印了。有些时候想基于Python的print自己实现各种功能还是太略显麻烦了。那么rich库是一个很好的选择。

82149f36-9bbc-11ee-8b88-92fbcf53809c.jpg

Rich 是一个 Python 库,可以为您在终端中提供富文本和精美格式。

Rich 的 API 让在终端输出颜色和样式变得很简单。此外,Rich 还可以绘制漂亮的表格、进度条、markdown、语法高亮的源代码以及栈回溯信息(tracebacks)等——开箱即用。 网上关于rich库的介绍挺多的,这里就不拾人牙慧了。借助rich的丰富功能,可以基于少量的代码来实现相对比较丰富的功能。

举个例子,对于设计而言,维护寄存器/文档的一致性除非代码用脚本生成的那么其他情况下往往项目做到最后越来越文不对题。在逻辑开发中,我会基于SpinalHDL中的regif来在代码中进行定义寄存器实现,在其上面基础上重定义了它文档生成的代码,用来能够生成整个系统的寄存器文档。日常会输出一份html寄存器文档以及一份Json格式寄存器文档。随后在做集成工具时会通过命令行参数直接将json文件直接传给命令行工具,解析后借助rich的table直接能够一键dump所有的寄存器,并精确给到每个寄存器每个比特的注释说明,这比读一个寄存器,再去对照寄存器文档去看什么意思简直不要方便太多!

当然,借助chatgpt来实现基于rich定义各种显示功能这种体力劳动更能节省思考和动手能力。

Fire

既然定位是工具类型的,那么我们最终需要的肯定是一个命令行工具CLIs。这里推荐使用Fire这个库。不为别的,它最简单,简单到令人发指!

importfire

defadd(x, y):
returnx + y

defmultiply(x, y):
returnx * y

if__name__ == '__main__':
fire.Fire({
'add': add,
'multiply': multiply,
})


在上面这段代码里,我们定义的功能函数仅需把函数注册到Fire里就能自动生成命令行工具:

$ pythonexample.pyadd1020
30
$ pythonexample.pymultiply 1020
200


基本零成本实现一个CLI工具,简直太香了。

在VSCode中配合autoDocstring - Python Docstring Generator这个插件可以方便的为函数增加注释,从而在上面生成的命令行中很方便的生成帮助信息

importfire
defadd(x:int, y:int)-> int:
"""add operation

Args:
x (int): data
y (int): data

Returns:
int: sum
"""
returnx + y

defmultiply(x:int, y:int)-> int:
"""multiply operation

Args:
x (int): data
y (int): data

Returns:
int: multiply
"""
returnx*y

defversion()-> str:
"""get version info

Returns:
str: version number
"""
return"1.2.3"

if__name__ == '__main__':
fire.Fire()

运行时:

python3test.py--help
NAME
test.py

SYNOPSIS
test.pyGROUP | COMMAND

GROUPS
GROUP isone of the following:

fire
The Python Fire module.

COMMANDS
COMMAND isone of the following:

add
addoperation

multiply
multiply operation

version
getversioninfo

python3test.pyadd--help

NAME
test.pyadd- addoperation

SYNOPSIS
test.pyaddXY

DESCRIPTION
addoperation

POSITIONAL ARGUMENTS
X
Type: int
data
Y
Type: int
data

NOTES
You can also use flags syntaxforPOSITIONAL ARGUMENTS



白嫖的即视感!

pyinstaller


这种脚本在不同的机器上运行,自然是不希望直接将代码复制到机器上的,毕竟还要安装各种依赖包,有时候这些机器往往是不联网的。那么最简单的方式就是通过pyinstaller打包成一个可执行文件了。pyinstaller网上资料也比较多,也可以记住chatgpt来获取如何打包的方式。


比如针对上面的需要带.so的打包,我们仅需针对python main文件执行一条指令即可:

pyinstaller --onefile --add-binary='./clib/a.so:.' Test.py

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5290

    浏览量

    119792
  • Linux
    +关注

    关注

    87

    文章

    11202

    浏览量

    208694
  • 数据中心
    +关注

    关注

    16

    文章

    4630

    浏览量

    71879
  • python
    +关注

    关注

    55

    文章

    4766

    浏览量

    84364

原文标题:数据中心逻辑搬砖要会的——几个好用的Python库

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    动态封装成python模块的方法

    之前的文章 将静态封装成 python 模块中讲解了如何将静态封装成 python 模块,静态封装相对来说还是有点复杂,今天来介绍下动
    发表于 07-13 15:24 610次阅读

    Python机器学习常用

    Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的,再加上其简单、易学、速度快、开源免费、可移植性、可扩展性以及面向对象的特点,Python成为2017年最受欢迎的最受
    发表于 03-26 16:29

    2018年受到众多开发者关注的7个Python

    几个还不太知名的引起了Python开发者的关注。
    的头像 发表于 10-02 09:30 4736次阅读

    Python几个表情包

    今天制作表情包用到的技术还是之前提到的Turtle,可以从之前的文章除了画佩奇我们还要玩点更高级的,去学习Turtle的常用语法,然后就是PIL,之前通过这篇文章:Python骚操作|用P
    的头像 发表于 02-11 11:13 5151次阅读

    140种Python标准、第三方和外部工具都有了

    Python标准Python自带的标准Python标准无需安装,只需要先通过impor
    的头像 发表于 08-02 09:24 3283次阅读

    几个Python绘图Turtle的范例资料免费下载

    本文档的主要内容详细介绍的是几个Python绘图Turtle的范例资料免费下载。
    发表于 06-04 08:00 0次下载

    ADM1266 Python

    ADM1266 Python
    发表于 03-23 15:47 1次下载
    ADM1266 <b class='flag-5'>Python</b><b class='flag-5'>库</b>

    Python连接Oracle数据

    Python连接Oracle数据(深圳市核达中远通电源技术股份有限公司招聘)-该文档为Python连接Oracle数据讲解文档,是一份不错
    发表于 09-24 17:20 6次下载
    <b class='flag-5'>Python</b>连接Oracle数据<b class='flag-5'>库</b>

    如何安装常用Python

    Python作为一种流行的编程语言,拥有丰富的第三方资源,这些可以帮助开发者轻松实现各种功能,从数据分析到Web开发,从机器学习到图像处理,涵盖了各个领域。在Python的开发过程
    的头像 发表于 04-14 12:11 1117次阅读

    Python常用的几个命令介绍

    Python是一种功能强大的编程语言,广泛用于数据分析、人工智能和Web开发等领域。在使用Python时,需要掌握一些基本的命令,以便更好地管理和运行代码。下面将介绍Python常用的几个
    的头像 发表于 06-21 17:12 2273次阅读

    SQLite数据python的区别

    SQLite数据python的区别 SQLite是一种轻量级关系型数据管理系统,是一个嵌入式的数据引擎。Python是一种高级编程语
    的头像 发表于 08-28 16:41 802次阅读

    python有什么用 如何用python创建数据

    python有什么用 如何用python创建数据 Python是一种高级编程语言,可以用于开发各种类型的应用程序和工具。它的广泛应用使它在编程领域中极为受欢迎。
    的头像 发表于 08-28 16:41 1126次阅读

    python读取数据数据 python查询数据 python数据连接

    python读取数据数据 python查询数据 python数据连接
    的头像 发表于 08-28 17:09 1724次阅读

    如何使用Python和PinPong控制Arduino

    与传感器和其他物理设备集成的应用程序。如果您已经掌握了Python的基础知识,那么您可以通过使用Python来控制Arduino来入门。本文目的主要是向您展示如何使用PinPong通过Pyt
    的头像 发表于 10-13 10:59 885次阅读
    如何使用<b class='flag-5'>Python</b>和PinPong<b class='flag-5'>库</b>控制Arduino

    python中如何引入math

    Python中,要使用math,首先需要先引入它。mathPython的一个标准,它提供了许多数学函数和常数。通过使用math
    的头像 发表于 11-22 11:03 3968次阅读