Python-Tools / Dienstprogramme

Die Standardbibliothek enthält eine Reihe von Modulen, die sowohl als Module als auch als Befehlszeilenprogramme verwendet werden können.

Das dis- Modul

Das dis-Modul ist der Python-Disassembler. Es konvertiert Bytecodes in ein Format, das für den menschlichen Verzehr etwas besser geeignet ist.

Sie können den Disassembler über die Befehlszeile ausführen. Es kompiliert das angegebene Skript und druckt die zerlegten Bytecodes in das STDOUT. Sie können dis auch als Modul verwenden. Dasdis Die Funktion verwendet eine Klasse, eine Methode, eine Funktion oder ein Codeobjekt als einziges Argument.

Beispiel

#!/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)

Dies würde das folgende Ergebnis erzeugen -

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

Das pdb- Modul

Das pdb-Modul ist der Standard-Python-Debugger. Es basiert auf dem BDB-Debugger-Framework.

Sie können den Debugger über die Befehlszeile ausführen (geben Sie n [oder next] ein, um zur nächsten Zeile zu gelangen und eine Liste der verfügbaren Befehle abzurufen).

Beispiel

Bevor Sie versuchen zu rennen pdb.pyStellen Sie Ihren Pfad richtig auf das Python lib-Verzeichnis ein. Versuchen wir es also mit dem obigen Beispiel 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)

Das Profil - Modul

Das Profilmodul ist der Standard-Python-Profiler. Sie können den Profiler über die Befehlszeile ausführen -

Beispiel

Lassen Sie uns versuchen, das folgende Programm zu profilieren -

#!/usr/bin/python

vara = 10
varb = 20

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

Versuchen Sie jetzt zu laufen cProfile.pyüber diese Datei sum.py wie folgt -

$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 ......}

Das Tabnanny- Modul

Das Tabnanny-Modul überprüft Python-Quelldateien auf mehrdeutige Einrückungen. Wenn eine Datei Tabulatoren und Leerzeichen so mischt, dass Einrückungen vermieden werden, unabhängig von der verwendeten Tabulatorgröße, beschwert sich das Kindermädchen -

Beispiel

Lassen Sie uns versuchen, das folgende Programm zu profilieren -

#!/usr/bin/python

vara = 10
varb = 20

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

Wenn Sie versuchen würden, eine korrekte Datei mit tabnanny.py zu erstellen, wird dies nicht wie folgt beanstandet:

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