我有一个相当简单的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脚本也可以正常工作。这个错误并没有真正给我足够的背景甚至知道在哪里看。有任何想法吗?即使只是获取一些实际调试信息的方法也将受到赞赏。
答案 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'”这个东西,似乎它修复了它。