#python
#python
Вопрос:
Я кодирую систему ввода данных на Python, в которой пользователь также должен иметь возможность отправлять «команды», точно так же, как работает оболочка Python, или, например, интерфейсы SAS или R. Я хотел бы знать, как закодировать оболочку. Например, она должна предоставлять приглашение (которое не может быть удалено пользователем, например, >>> приглашение в Python) и получать входные данные от пользователя. Более того, после отправки записи пользователь не может вернуться назад, как в командной строке DOS, где вы не можете, так сказать, перейти на строку выше.
Кто-нибудь может помочь с этим?
Ответ №1:
cmd.Класс Cmd — это то, что поможет вам создать приложение, похожее на оболочку. Аналогично, cmd2 является хорошим обновлением по сравнению с вышеупомянутым модулем. С их помощью вы можете создать приложение оболочки, в котором есть история команд, меню справки и интеллектуальный синтаксический анализ команд. Не создавайте REPL с нуля, потому что этих модулей, вероятно, будет достаточно для ваших нужд.
Комментарии:
1. @Джош Ли, да, в ней есть несколько приятных улучшений. Я отредактирую свой ответ, чтобы включить также cmd2.
2. Блестяще, большое спасибо, что наставили меня на правильный путь. Попробуем это сегодня вечером!
Ответ №2:
Некоторое время назад я закодировал целую sh
реализацию на Python, но, к сожалению, у меня нет исходного кода.
Ваш базовый код будет таким:
while True:
command = raw_input('>>> ')
print 'You entered "{command}".'.format(command = command)
Но если вам нужно что-то более сложное, чем простая bash
подобная оболочка, есть несколько проектов, которые могут удовлетворить ваши потребности:
- IPython: Довольно надежная оболочка. Он используется Sage и кучей других крупных проектов.
- Собственный
cmd
класс в Python: не требует пояснений. Не очень многофункциональная, но это оболочка Python.
Комментарии:
1. Ты сделал? Использовала ли она также управляющие символы vt100?
2. Будь со мной полегче. Я закодировал функции, которые я фактически использовал, и для меня этого было достаточно для реализации.
3. Я спрашиваю только потому, что обычно я пишу на windoze-боксах, где оболочка паршивая. Поскольку я не могу найти достойную замену, которая была бы более «первоклассной», чем interix или cygwin, я решил написать оболочку на python. С небольшой помощью termEmulator я тоже могу уйти от ужасного терминала.
4. @Spencer: Вы пробовали консольное приложение, рекомендованное IPython? ipython.org/ipython-doc/stable/install/install.html и найдите «консоль», это не идеально, но вы можете счесть это полезным.
5. @JS. да, и это фантастика в том, что он делает. Которая не соответствует тому, что я хочу, а именно, клону bash с функциями, украденными у fish и msfconsole. Ipython — это интерпретатор python с удобными функциями оболочки. Я иду с другого направления, и хотя я, вероятно, мог бы заставить ipython делать то, что я хочу, я думаю, что это был бы интересный проект для работы.
Ответ №3:
Возможно, вы захотите заглянуть в библиотеку readline (также предоставляет вам необычные функции, такие как завершение и история). К сожалению, это только для UNIX, как и базовая библиотека C.
Комментарии:
1. Здесь основана Windows. В любом случае спасибо за ответ!