Python中的无法解释的段错误

1 投票
3 回答
3012 浏览
提问于 2025-04-17 04:39

我有一个比较简单的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

在64位的Linux系统上使用Skype4py时,我遇到了类似的问题(程序崩溃)。

有人在Skype论坛上建议我在脚本中添加

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

来看看发生了什么,但这并没有太大帮助。

奇怪的是,有时候它又能正常工作。我尝试了很多次启动这个脚本,有时能启动,但过一会儿又崩溃了。

无论如何,我测试了Steven提到的“Transport='x11'”这个设置,似乎解决了问题。

4

普通的Python代码出现段错误的可能性非常小。这里比较突出的是 Skype4Py。我不知道这个东西是什么,也不知道它来自哪里,但我敢打赌它可能是问题的根源。

10

我之前在使用Skype4Py时遇到过类似的问题,至少在我的情况下,发现Skype4Py在Mac上不支持64位的Python。不过这可能对你不适用,因为你的脚本有时能正常工作。

如果你是在Mac上,可以看看Ned Deily在这个问题下的评论,了解如何运行32位的Python:如何在Snow Leopard和其他32位/64位问题上强制Python为32位

而在写完上面的内容几个小时后,我在Linux上也遇到了类似的间歇性段错误。在这种情况下,当我使用X11连接而不是DBUS时,段错误就消失了。

Skype4Py.Skype(Transport='x11')

撰写回答