Все кто хоть чуть-чуть знаком с python, знают как удобно бывает, время от времени, проверить работоспособность чего-нибудь в интерпритаторе. Лично у меня постоянно вылетают из головы названия методов/функций итп, посему частенько приходится писать чтонибудь а ля:
|
>>> import sys
>>> dir(sys)
<'__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions'>
|
И все еще достаточно терпимо, когда список, возвращаемый
dir сравнительно небольшой, как выше, но когда он в два, а то и три, раза больше - найти нужный пункт становится проблемматично. На помощь, в таком случае, приходит модуль rlcompleter. Чтобы проиллюстрировать, как это работает приведу пример из официальной документации:
|
>>> import rlcompleter
>>> import readline
>>> readline.parse_and_bind("tab: complete")
>>> readline.
readline.__doc__ readline.get_line_buffer( readline.read_init_file(
readline.__file__ readline.insert_text( readline.set_completer(
readline.__name__ readline.parse_and_bind(
|
К слову, упомянутый выше модуль readline помимо дополнения, имеет еще одну полезную функцию - восстановление истории предыдущих сеансов работы с интерпритатором, в виде функций
read_history_file и
write_history_file.
Чтобы заставить интерпритатор автоматически загружать все эти вкусности делаем следующее:
создаем в домашнем каталоге файл
.pystartup (вообще говоря, выбор местоположения и имени этого файла не критичен, так что файл может находиться где угодно и назывться как вам хочется)
добавляем в этот файл строчки:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# -*- coding: utf-8 -*-
# Если Вы планируете использовать переменные окружения или `~`,
# то нужно обернуть строку в os.path.expandvars или os.path.expanduser
#
# Замечание: в случае, если значение перменной - пустая строка, readline
# будет использовать стандартный путь: ~/.history
HISTORY_FILE = 'path/to/history/file'
# Количество элементов истории, которые будут сохраняться, или -1, если
# Вы хотите сохранять все элементы.
HISTORY_FILE_SIZE = 20
import atexit
import rlcompleter
import readline
def validate_file(history_file):
"Function checks if the filename for the history file is valid."
import os.path
return not history_file or os.path.exists(history_file)
def save_history_file():
"Function saves input history to HISTORY_FILE."
import readline
readline.write_history_file(HISTORY_FILE)
# Инициализируем дополнение по
readline.parse_and_bind("tab: complete")
# Устанавливаем размер файла истории
readline.set_history_length(HISTORY_FILE_SIZE)
# Загружаем историю из файла
if validate_file(HISTORY_FILE):
readline.read_history_file(HISTORY_FILE)
# Регистрируем функцию для сохранения истории, при выходе из интерпритатора
atexit.register(save_history_file)
# Удаляем импортированные модули
del atexit
del rlcompleter
del readline
|
устанавливаем в
~/.bashrc (.zshrc, .cshrc w\e) значение переменной
PYTHONSTARTUP
|
export PYTHONSTARTUP ~/.pystartup
|
наслаждаемся готовым результатом :)
ЗЫ: хочется заранее разочаровать пользователей Windows, модуль , используемый в этом решении, имеет только Unix реализацию.