Python中的无法解释的段错误
我有一个比较简单的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')