2011-10-19 131 views
1

我有一个非常简单的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脚本也能正常工作。这个错误并没有给我足够的上下文,甚至不知道在哪里寻找。有任何想法吗?即使只是获得一些实际的调试信息的方式,将不胜感激。

+4

你确定它是Python的segfaulting,而不是你正在调用的程序'notify-send'吗?你有没有试过把'print'语句放在崩溃的地方? –

+0

当然'系统'导致一个子过程。是不是不可能seg段父母? –

+0

它看起来像是在skype.Attach()后发生。无论从哪里来,我都会把它吐出一次:http://pastebin.com/EHJez3Zm –

回答

10

我和Skype4Py有类似的问题,至少在我的情况下,事实证明Skype4Py不能在Mac上使用64位Python。虽然有时你的脚本有效,但可能不适用于你。

如果您使用的是Mac,看到斯内德Deily的评论在这个问题上对如何运行32位的Python:How do I force Python to be 32-bit on Snow Leopard and other 32-bit/64-bit questions

而只是写在上面的几个小时后,我面临着类似的间歇赛格Linux上的错误。在这种情况下,赛格故障走了,当我连接使用X11,而不是DBUS

Skype4Py.Skype(Transport='x11') 
4

纯Python的东西极不可能导致seg故障。这里突出的是Skype4Py。不知道那是什么或来自哪里,但我敢打赌这是罪魁祸首。

+0

+1:这不太可能是其他任何东西。 –

0

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

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

添加到脚本中,看看是怎么回事,但它并没有太大的帮助。

奇怪的是,它有时可以工作。我尝试过多次启动脚本,有时启动脚本,但稍后会启动脚本。

无论如何,测试了Steven提到的“Transport ='x11'”事情,而且它似乎修复了它。