问题 有没有办法直接在Python中访问硬件?


我希望自己学习图形库,并稍微玩一下。我建立了一个小程序,将线条和形状定义为像素列表,但我找不到直接访问屏幕的方法,这样我就可以在屏幕上显示点而不需要任何中间点。

我的意思是我不想使用任何预先构建的图形库,如gnome,cocoa等。我通常使用Python编写代码,我的程序使用Python,但我也可以编写和集成C模块。

我知道直接访问屏幕硬件会夺走Python的多平台方面,但我为了学习而无视它。那么:有没有办法直接在Python中访问硬件,如果有的话,它是什么?


10386
2017-12-24 00:32


起源

没有人,甚至没有最先进的视频游戏(大多数情况下,无论如何)做的事情都是低级别的。那是司机的工作。对于几乎所有的应用程序来说,这是完全不切实际的:非常复杂,很难无法移植到足够不同的硬件上,并且每当硬件供应商改进某些东西时都容易破坏(例如扩展管道),而这只是我的头脑。除非你想编写驱动程序,否则无需从中学到任何东西。我们有DirectX,OpenGL等原因。你可以从Python中访问那些(或至少是OpenGL)。
@delnan是的,但如果问题是有效的话,op并没有真正证明他为什么要学习。如果他想写司机怎么办? Insanly complicated, hard to impossible to port across sufficently different hardware, and prone to breaking whenever the hardware vendor improves something 所有这些与打开和关闭像素有什么关系?这就是问题,其他一切都是你广泛的投机观点。只显示像素是一种非常棒的学习体验。 - yannis
也许你是对的。但我的印象是OP对低级图形编程的构成有错误的印象。
@delnan嗯,让他学习艰难的方式:) - yannis
打开和关闭像素基本上就是我想做的事情。我知道在如此低级别做某事对于任何可以实际使用的东西都是不切实际的,但在我开始使用更高级别的API之前,我想了解底层软件是如何工作的,或者至少知道它是如何工作的。 - Émile Jetzer


答案:


这似乎是一个很好的自学路径,我会加上我的2美分价值,并建议你考虑看看 GObject的开罗 和 Pygame的 模块一段时间。

Python GObject的 模块可能处于比当前兴趣更高的级别,但它可以使用像素级绘图 开罗 (见 主页)以及使用Python为便携式GUI应用程序提供通用基础

Pygame的 还有像素级方法以及图形驱动程序的访问方法(在更高级别) - 这是一个快速 代码示例


2
2017-12-27 07:58





不,Python不是这种原始硬件访问视频卡的最佳选择。我建议在DOS下编写C语言。嗯,实际上,我不推荐它。这是一件可怕的事情。但是,这就是我学会如何做到这一点的原因,而且它可能与您在没有任何中间件的情况下直接访问硬件一样友好。

我说DOS而不是Linux或NT,因为这些都不会让你直接访问视频硬件而无需编写驱动程序。这意味着必须学习整个驱动程序API,并且你需要调用很多“魔法”,这不会非常明显,因为在Windows NT中编写视频驱动程序相当复杂。

我说C而不是Python,因为它给你真正的指针,并且能够用它们做愚蠢的事情。在DOS下,您可以写入C中的任意物理内存地址,这似乎是您想要的。试图让Python在一个足够糟糕的操作系统下运行,以便直接进行硬件访问本身就是一种挫败感,即使你只想做一些Python擅长的简单事情。

并且,正如其他人所说,不要指望在现实世界中使用您在该项目中学到的任何东西。这可能很有趣,但是如果你试图以这种方式编写一个真实的应用程序,那么你很快就会被那些需要维护代码的人所击中。


7
2017-12-24 04:35





现在这是一个很老的线索,但我在思考同样的问题时偶然发现了它。

我曾经用汇编语言编程。在我的日子里,在屏幕上绘图只是(?)将值放入内存位置。该值打开或关闭像素并定义其颜色。

“捅”一词来自Basic,而不是汇编程序。在汇编程序中,你必须将一个值写入数据寄存器,然后告诉处理器使用另一个命令放置数据的位置并指定一个地址寄存器,通常是十六进制形式!每个不同的处理器都有自己的汇编语言。但是hec代码很快!

随着硬件的发展,我发现图形硬件编程变得越来越复杂。除了现在简单地定义一个像素之外,它还有很多。图形子系统有自己的处理器 - 或处理器 - 而且你必须学会​​与之交谈。处理器不只是在内存位置上填充内容。 (我相信曾经是世界上最快的超级计算机曾经在图形芯片上跑了一段时间!)'Plonk'顺便说一句,它不是一个基本命令。

抱歉;我离题了。在回答原始海报的查询时,我相信通过试验Raspberry Pi可以最好地实现理解图形绘制过程的目标。它兼容Python,因此非常适合这项工作。它的硬件文档齐全,价格便宜且易于使用。

希望这有助于某人,干杯,M


1
2017-08-25 16:26