Herramientas / Utilidades de Python
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/python
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/python
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/python
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.