从第三方Python模块中提取信息?

时间:2016-07-03 22:20:25

标签: python

注意:我已经在Java工作了多年,但我是Python的新手,所以如果这是一个模糊的问题我会道歉。我只是在试图让事情发挥作用时挣扎。

我正在尝试使用第三方Python模块,它是一个应用程序SDK。 Python模块是底层遗留C SDK的包装器。

这个模块的文档非常糟糕 - 它基本上是包含的类和方法的列表,几乎没有解释方法的作用或它们与底层C函数调用的关系。 (例如,在一种情况下,Python方法需要五个参数,底层的C函数需要六个。没有迹象表明区别是什么,或者参数应该是什么。这是典型的。)

有什么方法可以查看这个编译的Python模块(未提供源代码)并收集更多信息?

1 个答案:

答案 0 :(得分:3)

查找模块信息的一个很好的起点是......

>>> import <modulename>
>>> <modulename>

它通常是四种可能类型中的一种......

<强> 1。内置的

>>> import sys
>>> sys
module 'sys' (built-in)>

这些通常用C语言编写,并编译成Python解释器二进制文件。

<强> 2。动态加载的库

>>> import parser
>>> parser
<module 'parser' from '/usr/lib/python2.7/lib-dynload/parser.x86_64-linux-gnu.so'>

这些通常也用C语言编写,但存储在单独的二进制文件中。常用文件扩展名包括:.pyd.dll.so

第3。 Python模块

>>> import socket
>>> socket
<module 'socket' from '/usr/lib/python2.7/socket.pyc'>

这些至少部分是用Python编写的,通常可以通过从文件名末尾删除c来查看源代码,即/usr/lib/python2.7/socket.py

对于用Python编写导入其他二进制模块的模块来说,做一些无法在纯Python中完成的事情也很常见。例如......

>>> socket._socket
<module '_socket' (built-in)>

<强> 4。 Python包

>>> import xml
>>> xml
<module 'xml' from '/usr/lib/python2.7/xml/__init__.pyc'>

这些也至少部分用Python编写,但文件__init__.py通常是空的,源代码包含在同一目录中的其他文件中,即/usr/lib/python2.7/xml