Python中不明原因的段错误

时间:2011-10-19 19:39:21

标签: python segmentation-fault

我有一个相当简单的Python脚本:

import Skype4Py
from random import randint
from time import strftime, sleep
from os import system

interval = 5

def pickStatus():
    try:
        handler = open("lines.txt", "r")
        lines = handler.read().split("\n")
        handler.close()
        rand = randint(0, len(lines))
        line = lines[rand]
        print strftime("%Y-%m-%d %I:%M %p [" + str(rand) + "] ") + line
        system('notify-send "New status" "' + line + '"')
        skype.CurrentUserProfile.MoodText = line
        sleep(interval * 60)
        pickStatus()
    except KeyboardInterrupt:
        pass

if __name__ == '__main__':
    skype = Skype4Py.Skype()
    skype.Attach()
    pickStatus()

当我运行它时,我有时得到这个:

~$ python RandomStatus.py
Segmentation fault
~$ 

但是,其他时候,脚本运行得很好。我所有其他Python脚本也可以正常工作。这个错误并没有真正给我足够的背景甚至知道在哪里看。有任何想法吗?即使只是获取一些实际调试信息的方法也将受到赞赏。

3 个答案:

答案 0 :(得分:10)

我遇到了与Skype4Py类似的问题,至少在我的情况下,事实证明Skype4Py在Mac上不适用于64位Python。可能不适用于您,因为您的脚本有时会起作用。

如果您使用的是Mac,请参阅Ned Deily在此问题中关于如何运行32位Python的评论:How do I force Python to be 32-bit on Snow Leopard and other 32-bit/64-bit questions

在写完上述内容后的几个小时,我在Linux上遇到了类似的间歇性seg故障。在这种情况下,当我使用X11而不是DBUS

连接时,seg故障消失了
Skype4Py.Skype(Transport='x11')

答案 1 :(得分:4)

纯Python的东西极不可能导致seg错误。这里有什么是Skype4Py。不知道它是什么或来自哪里,但我敢打赌它是罪魁祸首。

答案 2 :(得分:0)

在64位Linux系统上使用Skype4py后,我得到了类似的结果(segfault)。 Skype论坛上有人建议添加

import logging
logging.basicConfig(level=logging.DEBUG)

到脚本,看看发生了什么,但它没有多大帮助。

奇怪的是它有时会起作用。我尝试多次启动脚本,有时会启动但稍后会出现段错误。

无论如何,测试了史蒂文提到的“Transport ='x11'”这个东西,似乎它修复了它。