2013-04-28 2 views
1

Я рассматриваю этот учебник в скрученном питоне. https://github.com/jdavisp3/twisted-intro/blob/master/twisted-client-3/get-poetry.pyКак просмотреть все текущие объекты и их непосредственные методы

def get_poetry(host, port, callback): 
    """ 
    Download a poem from the given host and port and invoke 

     callback(poem) 

    when the poem is complete. 
    """ 
    from twisted.internet import reactor 
    factory = PoetryClientFactory(callback)#I am interested in checking the instances alive here 
    reactor.connectTCP(host, port, factory) 


def poetry_main(): 
addresses = parse_args() 

from twisted.internet import reactor 

poems = [] 

def got_poem(poem): 
    poems.append(poem) 
    if len(poems) == len(addresses): 
     reactor.stop() 

for address in addresses: 
    host, port = address 
    get_poetry(host, port, got_poem) 

reactor.run() 

for poem in poems: 
    print poem 


if __name__ == '__main__': 
    poetry_main() 

Я действительно никогда не отлажена питона раньше.

Я хотел посмотреть, какие экземпляры классов живы до начала реактора.

Я проверял этот Printing all instances of a class

с этим кодом

import gc 
for obj in gc.get_objects(): 

Как можно выборочно просматривать верхнюю большую часть информации, а затем дополнительно унаследовали данные и так далее?

С закрученной точки зрения, я хочу увидеть, какие фабрики экземпляров в настоящее время активны и как это связанно с протоколами

ответ

1

Но, если вы на самом деле просто хотите совать вещи, чтобы получить чувство для того, как отлаживать Python, проверьте 'dir (obj)', в котором будут перечислены все свойства и методы объекта.

class Blah(object): 
    pass 

b = Blah() 

for x in dir(b): 
    try: 
     print getattr(b,x,False) 
    except Exception, e: 
     print x,e 

даст:

<class '__main__.Blah'> 
<method-wrapper '__delattr__' of Blah object at 0x1028ba490> 
{} 
None 
<built-in method __format__ of Blah object at 0x1028ba490> 
<method-wrapper '__getattribute__' of Blah object at 0x1028ba490> 
<method-wrapper '__hash__' of Blah object at 0x1028ba490> 
<method-wrapper '__init__' of Blah object at 0x1028ba490> 
__main__ 
<built-in method __new__ of type object at 0x10276a4e0> 
<built-in method __reduce__ of Blah object at 0x1028ba490> 
<built-in method __reduce_ex__ of Blah object at 0x1028ba490> 
<method-wrapper '__repr__' of Blah object at 0x1028ba490> 
<method-wrapper '__setattr__' of Blah object at 0x1028ba490> 
<built-in method __sizeof__ of Blah object at 0x1028ba490> 
<method-wrapper '__str__' of Blah object at 0x1028ba490> 
<built-in method __subclasshook__ of type object at 0x7fd522c6e490> 

Теперь, ваш пробег может изменяться в зависимости от вещи, как ObjC - так как это тонкий Python обертка решений общих вызовов библиотеки. Они не будут иметь docstrings или в некоторых случаях отвечают на «dir», если поиск функций - это ленивый поиск по сравнению с общими библиотеками. Но ты никогда не знаешь.

В большинстве случаев, когда дело касалось объектов objc, я просто вырыл их в исходном коде, чтобы выяснить, как они это сделали, когда обычные методы выкапывания грязи не сработали.

Говоря о нормальных методов:

Аккуратный особенность с витыми, вы можете также служить телнет или SSH, доступную интерактивную оболочку Python, который может на самом деле нащупывать и вещи «вживую». Check here for details on TwistedConch.

Или ..

Еще одна уловка, чтобы добавить «дель (Я)», функция для ваших объектов, которая печатает что-то, как объект очищаетс сборщиком мусора (если он удален/из области видимости)

или ..

Вы также можете играть с pdb, или, если вам нравится Ncurses pudb является удивительным. Проверьте этот вопрос на пару отличных трюков для использования pdb. starting-python-debugger-automatically-on-error

А если хуже, тем хуже - вы всегда можете использовать помощь (объект).

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

+0

спасибо ...Как я могу перечислить все текущие фабрики и протоколы, связанные с реактором? – 2013-04-28 10:17:40

+0

Не уверенный в возврате данных, зарегистрированных в реакторе - в этом случае я настоятельно рекомендую настроить TwistedConch, чтобы вы могли просто использовать SSH в интерактивном Python CLI, запущенном внутри вашего приложения. Вы можете запустить 'dir()', сам по себе, чтобы увидеть глобальные объекты верхнего уровня - и начните сверление оттуда. – synthesizerpatel

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