Python 中的特定于平台的本地人

Platform Specific Natives in Python

This page 详细介绍了如何使用 C 扩展 Python。但是,我没有看到任何有关根据 OS 使用不同 C 代码的信息。

我相当确定这可以完成,因为 python 库 colorama has cross platform terminal color support, which as far as I know needs different code for Windows and Unix. However, I looked through the source code 找不到任何东西。需要注意的是,我可能错过了,因为 python 和 C 都不是我的专业领域。

TL;DR: 如何使用 OS 特定的 C 代码扩展 python?

通常在 C 中,这是使用条件编译完成的。大多数编译器都会有一个预处理器宏指示 OS。例如:

#ifdef WIN32
     // do Windows stuff
#else
     // do something else
#endif

这些宏的名称是特定于编译器的。

或者,我的首选方案是将 OS 特定代码放在它自己的 DLL 或共享对象中,然后 link 将代码放入独立于平台的 python 界面。

例如,您将 Python 接口编写为可移植的,当您遇到特定 OS 的内容时,您将调用您自己发明的通用函数。 Linux、Windows、OS X 等的每个共享库中都有此通用函数的副本,在 link 以后解决。

是进行条件编译还是OS特定库取决于代码的不同程度。