Python – Pydoc

PyDOC_cleitonbueno.com

Pydoc é uma grande ferramenta do leque do Python, que pode ser utilizada para gerar documentação dos módulos baseado em docstrings[1] e também ter acesso a essa documentação, naquele famoso estilo man-pages.

Imagina você querendo saber informações ou ajuda sobre um modulo mais esta sem internet, então nosso amigo Google não poderá ajudar, vamos de pydoc[2] então.

O mais trivial e que sempre uso é pydoc e o nome do modulo, irei tomar como exemplo o serial (modulo de comunicação serial do Python [pyserial][3]).

$ pydoc serial
Help on package serial:

NAME
    serial

FILE
    /usr/lib/python2.7/dist-packages/serial/__init__.py

DESCRIPTION
    # portable serial port access with python
    # this is a wrapper module for different platform implementations
    #
    # (C) 2001-2010 Chris Liechti <[email protected]>
    # this is distributed under a free software license, see license.txt

PACKAGE CONTENTS
    rfc2217
    serialcli
    serialjava
    serialposix
    serialutil
    serialwin32
    sermsdos
    tools (package)
    urlhandler (package)
    win32

FUNCTIONS
    serial_for_url(url, *args, **kwargs)
        Get an instance of the Serial class, depending on port/url. The port is not
        opened when the keyword parameter 'do_not_open' is true, by default it
        is. All other parameters are directly passed to the __init__ method when
        the port is instantiated.
        
        The list of package names that is searched for protocol handlers is kept in
        ``protocol_handler_packages``.
        
        e.g. we want to support a URL ``foobar://``. A module
        ``my_handlers.protocol_foobar`` is provided by the user. Then

Irei postar só uma parte do conteúdo, o mais legal e que mais gosto de usar é o acesso direto no que preciso. Como assim? Por exemplo, eu quero conhecer a classe Serial do modulo, então faço assim.

$ pydoc serial.Serial
Help on class Serial in serial:

serial.Serial = class Serial(PosixSerial, io.RawIOBase)
 |  # classic version with our own file-like emulation
 |  
 |  Method resolution order:
 |      Serial
 |      PosixSerial
 |      serial.serialutil.SerialBase
 |      io.RawIOBase
 |      _io._RawIOBase
 |      io.IOBase
 |      _io._IOBase
 |      __builtin__.object
 |  
 |  Data and other attributes defined here:
 |  
 |  __abstractmethods__ = frozenset([])
 |  
 |  ----------------------------------------------------------------------
 |  Methods inherited from PosixSerial:
 |  
 |  close(self)
 |      Close port
 |  
 |  drainOutput(self)
 |      internal - not portable!
 |  
 |  fileno(self)
 |      For easier use of the serial port instance with select.
 |      WARNING: this function is not portable to different platforms!
 |  
 |  flowControl(self, enable)
 |      manually control flow - when hardware or software flow control is
 |      enabled
 |  
 |  flush(self)
 |      Flush of file like objects. In this case, wait until all data
 |      is written.
:
.....

Muito legal, agora eu sei que quando crio um objeto com serial.Serial(), tenho todos estes métodos para usar, e se eu precisar de ajuda ou queira conhecer algum destes métodos.

$ pydoc serial.Serial.flushInput
Help on method flushInput in serial.Serial:

serial.Serial.flushInput = flushInput(self) unbound serial.serialposix.Serial method
    Clear input buffer, discarding all that is in the buffer.
(END)




$ pydoc serial.Serial.read
Help on method read in serial.Serial:

serial.Serial.read = read(self, size=1) unbound serial.serialposix.Serial method
    Read size bytes from the serial port. If a timeout is set it may
    return less characters as requested. With no timeout it will block
    until the requested number of bytes is read.

No exemplo acima, estou acessando o conteúdo de flushInput e read da classe Serial.

E quando você quer pesquisar algo e não sabe o nome do modulo, vamos de pydoc[2] também.

$ pydoc -k serial
pickle - Create portable serialized representations of Python objects.
html5lib.serializer 
html5lib.serializer.htmlserializer 
No handlers could be found for logger "oneconf.distributor"
piston_mini_client.serializers - Classes that define ways for your API methods to serialize arguments
serial 
serial.rfc2217 
serial.serialcli 
serial.serialjava 
serial.serialposix 
serial.serialutil 
serial.serialwin32 
serial.sermsdos 
serial.tools 
serial.tools.list_ports - This module will provide a function called comports that returns an
serial.tools.list_ports_posix 
serial.tools.list_ports_windows 
serial.tools.miniterm 
serial.urlhandler 
serial.urlhandler.protocol_hwgrep 
serial.urlhandler.protocol_loop 
serial.urlhandler.protocol_rfc2217 
serial.urlhandler.protocol_socket 
serial.win32 
twisted.internet._posixserialport - Serial Port Protocol
twisted.internet._win32serialport - Serial port support for Windows.
twisted.internet.serialport - Serial Port Protocol
twisted.internet.test.test_serialport - Tests for L{twisted.internet.serialport}.
twisted.protocols.gps.rockwell - Rockwell Semiconductor Zodiac Serial Protocol
twisted.protocols.mice.mouseman - Logictech MouseMan serial protocol.
twisted.test.test_jelly - Test cases for L{jelly} object serialization.
twisted.web._flatten - Context-free flattener/serializer for rendering Python objects, possibly

Com o parâmetro -k estamos especificando uma palavra-chave para busca, e no caso usei serial.

Você acha que acabou? Imagina esse poder além dos terminais. E você tem, pois consegue subir um “webserver” para acessar tudo isso localmente pelo navegador.

$ pydoc -p 9876
pydoc server ready at http://localhost:9876/

pydoc_server_cleitonbueno.com

Procurando o modulo serial na pagina.

pydoc_server_serial_cleitonbueno.com

Acessando o modulo e visualizando o conteúdo.

pydoc_server_serial_info_cleitonbueno.com

E para fechar com chave de ouro, e se pudéssemos pesquisar sobre o que quiséssemos  e pudesse gerar uma pagina dessas para visualizar via web, vamos fazer.

$ pydoc -w serial
wrote serial.html

E gerou uma pagina chamada serial.html no local que esta sendo executado o pydoc, com todo o conteúdo do modulo serial que pode ser visualizado via web e até impresso.

Isso porque eu não falei que dentro do Python você pode usar o help() ;)

Espero que tenham gostado, e até a próxima!

Referências

[1] – http://pt.wikibooks.org/wiki/Python/Conceitos_b%C3%A1sicos/Coment%C3%A1rios_e_docstrings

[2] – https://docs.python.org/2/library/pydoc.html

[3] – https://pypi.python.org/pypi/pyserial

Share Button

CC BY-NC-SA 4.0 Python – Pydoc by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.