Useful Python executable modules
In the article "Using Python command line" I've described some executable modules and now want to give more details about the most interesting ones. I do not pretend to cover everything, just want to point out some directions where you can go if you find this useful.
SimpleHTTPServer
(1): --- modulename: trace, funcname:
SimpleHTTPServer
The executable module which I use if there is no possibility to send files from one computer to another by other methods (ssh, smb, ftp etc). It is not so fast, but can be very useful sometimes. The usage is very simple - just change directory to the required one, and start SimpleHTTPServer:
calendar
Very simple module - just shows the year calendar:
urllib
Very simple download manager. Useful if you want to download a file or a page via command line, but don't have wget utility (for example, in Windows). Now you don't even need to open IE for FF downloading:
$ python -m urllib "http://download.mozilla.org/?product=firefox-3.6.6&os=win&lang=en-US" > firefox_setup.exe
timeit
Tool for measuring execution time of small code snippets. For example, let's measure classical list comprehension example:
$ python -m timeit "l = []" "for i in range(1000):l.append(i ** 2)"
1000 loops, best of 3: 243 usec per loop
$ python -m timeit "[i ** 2 for i in range(1000)]"
10000 loops, best of 3: 181 usec per loop
$ python -m timeit "map(lambda i: i ** 2, range(1000))"
1000 loops, best of 3: 278 usec per loop
Standard list comprehension wins! :-)
trace
This module allows trace the script execution and gather various statistics. As an example, I'll use the makepwd.py script. The --trace option trace all the Python commands executed during the script running:
$ python -m trace --trace makepwd.py
--- modulename: threading, funcname: settrace
threading.py(90): _trace_hook = func
--- modulename: trace, funcname:
makepwd.py(2): """ Simple password generator """
makepwd.py(4): import random
--- modulename: random, funcname:
..... skipped ....
--- modulename: random, funcname: randrange
random.py(171): istart = int(start)
random.py(172): if istart != start:
random.py(174): if stop is default:
random.py(182): istop = int(stop)
random.py(183): if istop != stop:
random.py(185): width = istop - istart
random.py(186): if step == 1 and width > 0:
random.py(200): if width >= maxwidth:
random.py(202): return int(istart + int(self.random()*width))
makepwd.py(15): for __ in range(options.length)])
$GdEu3Xz
Of course, it is VERY verbose, but it can be useful for Python learning or debugging multithreaded application.
profile
This module allows to profile a script. It supports various sorting options. As an example, I'll use the same script:
$ python -m profile -s calls makepwd.py
&<^8i*i=
430 function calls in 0.000 CPU seconds
Ordered by: call count
ncalls tottime percall cumtime percall filename:lineno(function)
48 0.000 0.000 0.000 0.000 :0(endswith)
48 0.000 0.000 0.000 0.000 :0(startswith)
36 0.000 0.000 0.000 0.000 :0(append)
25 0.000 0.000 0.000 0.000 :0(setattr)
18 0.000 0.000 0.000 0.000 :0(get)
18 0.000 0.000 0.000 0.000 :0(find)
16 0.000 0.000 0.000 0.000 :0(stat)
16 0.000 0.000 0.000 0.000 genericpath.py:15(exists)
16 0.000 0.000 0.000 0.000 posixpath.py:59(join)
12 0.000 0.000 0.000 0.000 :0(replace)
11 0.000 0.000 0.000 0.000 :0(len)
8 0.000 0.000 0.000 0.000 :0(random)
8 0.000 0.000 0.000 0.000 random.py:160(randrange)
8 0.000 0.000 0.000 0.000 :0(chr)
smtpd
This module is useful for testing e-mail sending. It allows to run "dumb" SMTP server that receives the e-mails locally and displays them to the terminal, but does not actually send anything.
$ python -m smtpd -n -c DebuggingServer localhost:1025
This command will start a simple SMTP server listening on port 1025 of localhost. This server simply prints to standard output all e-mail headers and the e-mail body.
This brief post shows just a little part of the Python magic. Study, experiment, and let the Python force be with you!
Comments
Post a Comment