Python 3 - Herramientas / Utilidades

La biblioteca estándar viene con una serie de módulos que se pueden utilizar como módulos y como utilidades de línea de comandos.

El módulo dis :

El módulo dis es el desensamblador de Python. Convierte códigos de bytes a un formato que es un poco más apropiado para el consumo humano.

Puede ejecutar el desensamblador desde la línea de comandos. Compila el script dado e imprime los códigos de bytes desensamblados en STDOUT. También puede utilizar dis como módulo. losdis función toma una clase, método, función u objeto de código como su único argumento.

Ejemplo

#!/usr/bin/python3
import dis

def sum():
   vara = 10
   varb = 20

   sum = vara + varb
   print ("vara + varb = %d" % sum)

# Call dis function for the function.

dis.dis(sum)

Esto produciría el siguiente resultado:

6           0 LOAD_CONST               1 (10)
              3 STORE_FAST               0 (vara)

  7           6 LOAD_CONST               2 (20)
              9 STORE_FAST               1 (varb)

  9          12 LOAD_FAST                0 (vara)
             15 LOAD_FAST                1 (varb)
             18 BINARY_ADD
             19 STORE_FAST               2 (sum)

 10          22 LOAD_CONST               3 ('vara + varb = %d')
             25 LOAD_FAST                2 (sum)
             28 BINARY_MODULO
             29 PRINT_ITEM
             30 PRINT_NEWLINE
             31 LOAD_CONST               0 (None)
             34 RETURN_VALUE

El módulo pdb

El módulo pdb es el depurador estándar de Python. Se basa en el marco del depurador bdb.

Puede ejecutar el depurador desde la línea de comandos (escriba n [o siguiente] para ir a la línea siguiente y obtener ayuda para obtener una lista de los comandos disponibles) -

Ejemplo:

Antes de que intentes correr pdb.py, configure su ruta correctamente al directorio lib de Python. Así que intentemos con el ejemplo anterior sum.py -

$pdb.py sum.py
> /test/sum.py(3)<module>()
-> import dis
(Pdb) n
> /test/sum.py(5)<module>()
-> def sum():
(Pdb) n
>/test/sum.py(14)<module>()
-> dis.dis(sum)
(Pdb) n
  6           0 LOAD_CONST               1 (10)
              3 STORE_FAST               0 (vara)

  7           6 LOAD_CONST               2 (20)
              9 STORE_FAST               1 (varb)

  9          12 LOAD_FAST                0 (vara)
             15 LOAD_FAST                1 (varb)
             18 BINARY_ADD
             19 STORE_FAST               2 (sum)

 10          22 LOAD_CONST               3 ('vara + varb = %d')
             25 LOAD_FAST                2 (sum)
             28 BINARY_MODULO
             29 PRINT_ITEM
             30 PRINT_NEWLINE
             31 LOAD_CONST               0 (None)
             34 RETURN_VALUE
--Return--
> /test/sum.py(14)<module>()->None
-v dis.dis(sum)
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb)

El módulo de perfil

El módulo de perfil es el generador de perfiles estándar de Python. Puede ejecutar el generador de perfiles desde la línea de comando:

Ejemplo

Intentemos perfilar el siguiente programa:

#!/usr/bin/python3

vara = 10
varb = 20

sum = vara + varb
print "vara + varb = %d" % sum

Ahora intenta correr cProfile.pysobre este archivo sum.py de la siguiente manera:

$cProfile.py sum.py
vara + varb = 30
         4 function calls in 0.000 CPU seconds

   Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno
   1    0.000    0.000    0.000    0.000 <string>:1(<module>)
   1    0.000    0.000    0.000    0.000 sum.py:3(<module>)
   1    0.000    0.000    0.000    0.000 {execfile}
   1    0.000    0.000    0.000    0.000 {method ......}

El módulo tabnanny

El módulo tabnanny comprueba los archivos fuente de Python para detectar una sangría ambigua. Si un archivo mezcla pestañas y espacios de una manera que elimina la sangría, sin importar el tamaño de pestaña que esté usando, la niñera se queja:

Ejemplo

Intentemos perfilar el siguiente programa:

#!/usr/bin/python3

vara = 10
varb = 20

sum = vara + varb
print "vara + varb = %d" % sum

Si intenta un archivo correcto con tabnanny.py, entonces no se quejará de la siguiente manera:

$tabnanny.py -v sum.py
'sum.py': Clean bill of health.