Консольные хитрости Питон: история команд + автодополнение

Python
Если вы разрабатываете программы на Питоне, то, уверен, вы хорошо знакомы с работой с ним в интерактивном режиме. Это самый простой и удобный способ проверить пришедшую в голову идею, запустить библиотечную функцию, пошагово прогнать какой-то алгоритм и т.п. без создания лишних мусорных файлов. Вобщем питоновская консоль — очень мощная и удобная вещь. У меня постоянно напрашивается сравнение с юникс-шеллом в языке. Если бы не две ложки дегтя в этой бочке меда: команду каждый раз приходится набирать заново, вместо того, чтобы просто нажать стрелку вверх и подправить команду, а также приходится писать много лишнего, что только добавляет опечаток и необходимости повторного набора. Вобщем я хочу как в баше: история + автодополнение.
Я удивлен почему это еще не сделано по умолчанию. Кстати, очень может быть, что это уже реализовано в вашей системе, и вам это совершенно неактуально — тогда можете совершенно смело пропустить эту статью. Возможно это пригодится кому-то другому. На попавшихся мне Macos, Freebsd, Debian и Fedora этого не было.



Для этого нужно создать где-то в недрах файловой системы файл initialize.py такого содержания:

import sys, os, readline

histfile = os.path.join(os.environ["HOME"], ".pyhist")
try:
readline.read_history_file(histfile)
except IOError:
pass
import atexit
atexit.register(readline.write_history_file, histfile)
del os, histfile

try:
import readline
except ImportError:
print "Module readline not available."
else:
import rlcompleter
readline.parse_and_bind("tab: complete")


* This source code was highlighted with Source Code Highlighter.


Я предпочитаю такие файлы закидывать в ~/bin/.
А дальше при каждом запуске вначале выполняете этот скрипт. Конечно, это не надо делать руками — если вы используете bash в качестве оболочки, то просто добавьте в .bashrc строку:
export PYTHONSTARTUP=$HOME/bin/initialize.py


Теперь работа с консолью питона станет не просто кайфом, а сплошным кайфом. Вызываем оболочку:

$ python
Python 2.5.2 (r252:60911, May 28 2008, 08:35:32)
Type "help", "copyright", "credits" or "license" for more information.
>>> from UserDict import UserDict



Самой собой история команд поначалу пуста — поэтому стрелку вверх жать не надо.
Создаем какой-нибудь объект — я для примера взял UserDict. После того как он импортирован начните набирать команду и нажмите <Tab>
>>> u=User # здесь нажат <Tab><Tab>
UserDict UserWarning
>>> u=UserDict()

# посмотрим какие у него есть поля и методы:
>>> u. # снова <tab><tab>
u.__class__ u.__delitem__ u.__init__ u.__repr__ u.copy u.get u.iteritems u.keys u.setdefault
u.__cmp__ u.__doc__ u.__len__ u.__setitem__ u.data u.has_key u.iterkeys u.pop u.update
u.__contains__ u.__getitem__ u.__module__ u.clear u.fromkeys u.items u.itervalues u.popitem u.values
>>> u.


* This source code was highlighted with Source Code Highlighter.


После выхода из интерпретатора вся история команд будет записана в файл ~/.pyhist, и запустив консоль заново, мы можете легко повторить действия, которые делали в прошлый раз.

Очень может быть, что с первого раза у вас не заработает. Скорее всего дело в том, что не установлен модуль python-readline — именно так было у меня. На дебиане ставится элементарно:
apt-get install python-readline

Для других дистрибутивов — см. инструкцию к своему дистру.

Способ честно подсмотрен на просторах интернета. Надеюсь, будет вам полезен.
Tags:pythonconsolehistoryautocompleteистория командавтодополнение
Hubs: Python
+42
15.5k 53
Comments 34

Popular right now

Python-разработчик с нуля
January 22, 202169,900 ₽Нетология
Python для веб-разработки
January 22, 202149,500 ₽SkillFactory
Python для работы с данными
January 25, 202131,500 ₽Нетология
Python-разработчик
January 28, 202199,000 ₽Яндекс.Практикум
Мидл python-разработчик
February 11, 202185,000 ₽Яндекс.Практикум

Top of the last 24 hours