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特定库取决于代码的不同程度。
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特定库取决于代码的不同程度。