如何找出python模块拥有的方法,属性等

时间:2011-02-24 10:24:38

标签: python import

让我说我导入一个模块。为了让我充分利用它,我想知道我可以使用哪些属性,方法等。有没有办法找到它?

例如:Determining running programs in Python

在这一行:

os.system('WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid')

假设我想打印出进程消耗的内存。我怎么知道这是否可能?它的正确“标签”是什么? (正如作者使用'Commandline','ProcessId')

同样,在此:

import win32com.client
def find_process(name):
    objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
    objSWbemServices = objWMIService.ConnectServer(".", "root\cimv2")
    colItems = objSWbemServices.ExecQuery(
         "Select * from Win32_Process where Caption = '{0}'".format(name))
    return len(colItems)

print find_process("SciTE.exe")

如何使该功能还打印出所消耗的内存,可执行路径等?

4 个答案:

答案 0 :(得分:41)

对于Python模块,你可以做

>>> import module
>>> help(module)

并且您将获得支持的方法列表(更准确地说,您获得了docstring,它可能不包含每个方法)。如果你想要,你可以使用

>>> dir(module)

虽然现在你只需要获得该模块中所有属性,方法,类等的长列表。

在你的第一个例子中,你正在调用外部程序。当然,Python不知道wmic.exe具有哪些功能。应该怎么做?

答案 1 :(得分:11)

dir(module)返回模块属性的名称

module.__dict__是键和属性对象本身之间的映射

module.__dict__.keys()dir(module)是具有相同元素的列表,但它们不相等,因为元素的顺序不相同

似乎help(module)是你真正需要的

答案 2 :(得分:3)

Python有一个名为dir()的内置函数。我不确定这是否是你所指的,但启动一个交互式python控制台并输入:

import datetime
dir(datetime)

这应该为您提供方法,属性和子模块的列表

答案 3 :(得分:2)

@ldmvcd

好的,对不起,我认为你是初学者,而且你没有看到我所指的基本概念。

  

对象是Python的抽象   数据。 Python程序中的所有数据都是   由对象或关系表示   对象之间。   http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy

我不明白为什么它被称为“抽象”:对我来说,一个对象是机器中真实存在的东西,是根据某些规则组织的一系列比特来表示概念数据或功能。

  

名称指的是对象。名字是   通过名称绑定操作引入。   每次出现一个名字   程序文本指的是绑定   这个名字建立在最里面   包含使用的功能块。   http://docs.python.org/reference/executionmodel.html#naming-and-binding

  

命名空间是从名称到的映射   对象。 目前大多数命名空间   实现为Python词典,   但这通常不会引起注意   任何方式(表演除外),和   它可能会在未来发生变化。例子   命名空间是:内置的集合   名称(包含诸如的函数)   abs()和内置异常名称);   模块中的全局名称;和   函数调用中的本地名称。   从某种意义上说,一组属性   对象也形成一个命名空间。   http://docs.python.org/tutorial/classes.html#a-word-about-names-and-objects

  

顺便说一下,我使用了word属性   对于点后面的任何名称 - for   例如,在表达式z.real中,   real是对象z的属性。   严格地说,引用名称   在模块中是属性引用:   在表达式modname.funcname中,   modname是一个模块对象和   funcname是它的一个属性。在   这种情况恰好有一个   直截了当的映射   模块的属性和全局   模块中定义的名称:它们   共享相同的命名空间!   http://docs.python.org/tutorial/classes.html#a-word-about-names-and-objects

  

命名空间是在不同的位置创建的   时刻,有不同的生命。   http://docs.python.org/tutorial/classes.html#a-word-about-names-and-objects

  

模块的命名空间是   第一次自动创建了   模块已导入。主要模块   始终调用脚本   主要即可。 http://docs.python.org/reference/executionmodel.html#naming-and-binding

嗯,Python程序是一个很大的机器,可以使用对象,对这些对象的引用,这些对象的名称,以及名称和对象绑定的名称空间,名称空间被实现为字典。

所以,你是对的:当我提到密钥时,我将名称称为不同命名空间中的密钥。名称是任意的或不是,根据它们创建的对象是用户的对象还是内置对象。

我建议你仔细阅读部分

<强> 3.1。对象,值和类型 http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy

<强> 4.1。命名和绑定 http://docs.python.org/reference/executionmodel.html#naming-and-binding