2011-10-19 3 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 segfault, а не программа 'notify-send', которую вы вызываете? Вы пробовали прикладывать заявления 'print', чтобы увидеть, где он сбой? –

+0

Несомненно, 'система' приводит к подпроцессу. Разве это вряд ли приведет к отчуждению родителя? –

+0

Похоже, что это происходит сразу после skype.Attach(). Из ниоткуда я получил это, чтобы выплюнуть это однажды: http://pastebin.com/EHJez3Zm –

ответ

10

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

Если вы используете Mac, см комментарий НФДА Deily в этом вопросе для того, как запустить 32-разрядную Python: How do I force Python to be 32-bit on Snow Leopard and other 32-bit/64-bit questions

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

Skype4Py.Skype(Transport='x11') 
4

Простой материал Python исключительно маловероятен, чтобы привести к ошибке seg. Вот здесь Skype4Py. Не знаю, что это такое или где оно исходит, но я уверен, что это преступник.

+0

+1: Это вряд ли будет чем-то другим. –

0

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

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

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

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

В любом случае, протестирован предмет «Транспорт =« x11 », который упоминал Стивен, и кажется, что он исправляет его.

Смежные вопросы