2010-07-20 74 views
2

我有一个dbus和python的问题。从命令行运行python,告诉它import dbus,然后systembus = dbus.SystemBus()不会导致错误,也不会运行由也使用完全相同的代码的朋友编写的程序。然而,运行一个程序,我想写的时候,我得到这个错误:python dbus问题

Traceback (most recent call last): 
    File "dbtest.py", line 26, in <module> 
    a = getDevs() 
    File "dbtest.py", line 7, in getDevs 
    bus = dbus.SystemBus() 
AttributeError: 'module' object has no attribute 'SystemBus' 

任何想法,我做错了什么?我不认为我完全理解返回的错误。我到目前为止的代码是:

#!/usr/bin/env python 
import dbus 

def getDevs(): 
     bus = dbus.SystemBus() 

if __name__ == "__main__": 
     a = getDevs() 

回答

8

最明显的问题是,当您正在导入dbus,它是没有得到所有与它的方法。

在您的程序和朋友的程序中,请执行print dbus.__file__。这将显示它正在使用的.pyc。如果它们不同,则不会导入正确的dbus模块。

我在猜测你实际上是在本地目录中导入一些名为dbus.py的随机文件。或者,如果您的脚本名称是“dbus.py”,那么您只需导入它自己,幸运的是python不会递归导入。在这种情况下,最简单的解决方案是将有问题的文件重命名为其他内容。

+3

假设情况如此(脚本命名为dbus.py),请记住,由于这个原因,将脚本命名为与您要导入的模块相同的操作是不好的做法。 Python总是会尝试首先从相对路径导入,例如当前工作目录。 – jathanism 2010-07-20 18:56:54

+1

OMG我已经在这个问题上挣扎了半个小时。谢谢你们:D – netom 2011-02-10 15:38:55