Необъяснимое сегфо в Python - PullRequest
1 голос
/ 19 октября 2011

У меня довольно простой скрипт на 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 ]

10 голосов
/ 13 декабря 2011

У меня была похожая проблема с Skype4Py, и, по крайней мере, в моем случае оказалось, что Skype4Py не работает с 64-битным Python на Mac.Возможно, к вам это не относится, поскольку ваш скрипт иногда работает.

Если вы используете Mac, см. Комментарий Неда Дейли в этом вопросе о том, как запустить 32-битный Python: Как заставить32-разрядный Python для Snow Leopard и другие 32-разрядные / 64-разрядные вопросы

И всего через несколько часов после написания вышеизложенного я столкнулся с подобной прерывистой ошибкой сегмента в Linux.В этом случае ошибка seg исчезла, когда я подключился, используя X11 вместо DBUS

Skype4Py.Skype(Transport='x11')
4 голосов
/ 19 октября 2011

Простые вещи на Python вряд ли приведут к ошибке сегмента. Здесь торчит Skype4Py. Понятия не имею, что это такое и откуда оно берется, но держу пари, что это виновник.

0 голосов
/ 17 марта 2012

После использования Skype4py в 64-битной системе Linux я получил аналогичные результаты (segfault).Кто-то на форумах Skype предложил добавить

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

в сценарий, чтобы увидеть, что происходит, но это не сильно помогло.

И странная часть в том, что иногда он работает,Я пытался запустить сценарий много раз, иногда он запускается, но в некоторый более поздний момент он вызывает ошибки.

В любом случае, протестировал вещь "Transport = 'x11'", о которой говорил Стивен, и похоже, что она исправляет ее.*

...