Autocompletion for your python shell|console|interpreter
March 2010
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
About
This site is an effort to share some of the base knowledge I have gathered through all this years working with Linux, FreeBSD, OpenBSD, Python or Zope, among others. So, take a look around and I hope you will find the contents useful.
Recent Entries
Recent Comments

European Plone Symposium 2010 - Call for proposals
2010-03-12 plone.org news

Misioneros y caníbales, en Perl
2010-03-11 blackshell

Considering Transportation Options
2010-03-11 Saâd Kadhi / The Web self()

collective.idashboard 1.2.5
2010-03-11 plone.org releases

Dropping support for Apache 1.3 in mod_wsgi.
2010-03-11 Graham Dumpleton

quintagroup.catalogupdater 0.1
2010-03-11 plone.org releases

I think I wrote that. It was to sell nylons.
2010-03-11 emereci

Nessus 4.2: Displaying Scan Differences Using XMLRPC
2010-03-11 Saâd Kadhi / The Web self()

Notifica 1.0.1
2010-03-11 plone.org releases

Created using the AutoMotivator (made with secret alien...
2010-03-10 Ramble on

Your lovers won't kiss
2010-03-10 emereci

Ejecución directa de “comandos stream” via SSH
2010-03-10 vaites (dmnet)

Self-motivator: Programming You might not know him. You should....
2010-03-09 Ramble on

La Copy & Paste Web
2010-03-09 blackshell

Branco
2010-03-09 emereci

Speed test between django_mongokit and postgresql_psycopg2
2010-03-09 peterbe.com

In July
2010-03-09 Ramble on

Dark Yellow Morning Sky
2010-03-09 betabug

Vende enlaces con backlinks.com
2010-03-09 userlinux.net

Marc Espie on portability
2010-03-09 OpenBSD Journal (undeadly.org)

OpenSSH 5.4 released
2010-03-09 OpenBSD Journal (undeadly.org)

Mercurial en Fedora Core 4 y CentOS 5
2010-03-08 userlinux.net

How and why to use django-mongokit (aka. Django to MongoDB)
2010-03-08 peterbe.com

Planting Trees
2010-03-07 betabug

Returning committer: Niels Heinen (ports)
2010-03-07 FreeBSD latest news

pjsua: The Geek Out SIP Client
2010-03-06 betabug

Ubuntu Cola or Ubuntu Linux
2010-03-06 peterbe.com

DbWrench Database Design & Synchronization v1.6.3
2010-03-05 PostgreSQL latest news

High performance Grails with memcached
2010-03-04 Oliver's place (django)

Notificador para Spotify en Linux sobre Wine
2010-03-04 vaites (dmnet)

Recent Trackbacks
Categories
OpenBSD (8 items)
BSD (0 items)
FreeBSD (11 items)
Linux (1 items)
Security (3 items)
Python (18 items)
Zope (12 items)
Daily (104 items)
e-shell (7 items)
Hacks (7 items)
PostgreSQL (3 items)
OSX (7 items)
Nintendo DS (0 items)
enlightenment (0 items)
Apache (3 items)
Nintendo Wii (0 items)
Django (23 items)
Music (9 items)
Plone (7 items)
Archives

Syndicate this site (XML)

RSS/RDF 0.91

19 enero
2010

Autocompletion for your python shell|console|interpreter

this is an old one, but I would like to have it here as a reminder

One of the nice features of the django shell (that is, the python shell you get when you call ./manage.py shell inside a django project) is that it has tab autocompletion, that is, you can import a module and use tab-completion to see all the modules within it.

A lot of people are using iPython these days because of the lack of this feature on the default Python shell, but this is only by default, and if you are using iPython only because of the tab completion, forget about installing extra stuff, you only have to do this little trick:

import rlcompleter, readline
readline.parse_and_bind('tab:complete')

and you can use tab completion, for example:

>>> import smtplib
>>> smtplib.
smtplib.CRLF                      smtplib.SSLFakeFile               smtplib.__setattr__(
smtplib.LMTP                      smtplib.__all__                   smtplib.__sizeof__(
smtplib.LMTP_PORT                 smtplib.__class__(                smtplib.__str__(
smtplib.OLDSTYLE_AUTH             smtplib.__delattr__(              smtplib.__subclasshook__(
smtplib.SMTP                      smtplib.__dict__                  smtplib._have_ssl
smtplib.SMTPAuthenticationError(  smtplib.__doc__                   smtplib.base64
smtplib.SMTPConnectError(         smtplib.__file__                  smtplib.email
smtplib.SMTPDataError(            smtplib.__format__(               smtplib.encode_base64(
smtplib.SMTPException(            smtplib.__getattribute__(         smtplib.hmac
smtplib.SMTPHeloError(            smtplib.__hash__(                 smtplib.quoteaddr(
smtplib.SMTPRecipientsRefused(    smtplib.__init__(                 smtplib.quotedata(
smtplib.SMTPResponseException(    smtplib.__name__                  smtplib.re
smtplib.SMTPSenderRefused(        smtplib.__new__(                  smtplib.socket
smtplib.SMTPServerDisconnected(   smtplib.__package__               smtplib.ssl
smtplib.SMTP_PORT                 smtplib.__reduce__(               smtplib.stderr
smtplib.SMTP_SSL                  smtplib.__reduce_ex__(
smtplib.SMTP_SSL_PORT             smtplib.__repr__(

In this example, after importing smtplib I just wrote smtplib. in the shell and hit tab twice, to get all the available options in that module.

Nice, isn't it?

Ok, now it would be even nicer if we do not have to set tab completion each time we run the python shell, but this is an easy one.

Each time you run the python shell|console|interpreter, it will search for a variable in your environment called PYTHONSTARTUP, where you can set a file that will be executed after starting the shell (the perfect place to put some init-lines).

So, all you have to do is, first, add this two lines to a file, for example, called .pythonrc in your home:

$ cat ~/.pythonrc
import rlcompleter, readline
readline.parse_and_bind('tab:complete')
$

Second, add the PYTHONSTARTUP variable to your shell profile file. If you are using csh, tcsh or similar shells, this will do it:

echo "setenv PYTHONSTARTUP ~/.pythonrc" >> ~/.cshrc

If your shell is sh, bash, ksh or similars, this will do it:

echo "export PYTHONSTARTUP=~/.pythonrc" >> ~/.profile

(check your OS info, perhaps instead of .profile it could be .kshrc, .bashrc or something like that).

After that, you will be able to use tab completion each time in your default python shell, with no additional dependencies!

NOTE: Of course, you should take a look at iPython anyway, as it has a lot more features than tab-completion, it is a powerful tool you may find very very useful.

Posted by wu at 10:04 | Comments (0) | Trackbacks (0)
<< A parabola do carballo e mais o eucalipto | Main | Hidden emails for comments in this COREBlog >>
Comments
There are no comments.
Trackbacks
Please send trackback to:http://blog.e-shell.org/221/tbping
There are no trackbacks.
Post a comment