Вставьте команду в Bash Shell - PullRequest
1 голос
/ 07 февраля 2009

Есть ли способ ввести команду в приглашение bash в Linux? Я работаю над приложением истории команд - вроде поиска Ctrl + R, но по-другому. Я использую Python для этого.

Я покажу список команд из истории, основанных на поисковом запросе пользователя. Если пользователь нажимает клавишу ввода, приложение выполнит команду и напечатает результаты. Пока все хорошо.

Если пользователь выбирает команду и затем нажимает правую или левую клавишу, я хочу вставить команду в подсказку, чтобы пользователь мог отредактировать команду перед ее выполнением.

Если вы работаете в Linux, просто запустите консоль bash, нажмите Ctrl + r, введите cd (или что-то еще), а затем нажмите клавишу со стрелкой вправо - выбранная команда будет отображена в командной строке. Это функциональность, которую я ищу, но я хочу знать, как это сделать из Python.

Ответы [ 4 ]

3 голосов
/ 11 апреля 2009

Если я правильно понимаю, вы бы хотели, чтобы история поведения была похожа на поведение bash в приложение Python. Если это то, что вам нужно, GNU Readline Library - это путь.

Существует оболочка Python Интерфейс readline GNU , но он работает только в Unix. readline.py похоже версия для Windows, но я никогда не пробовал.

3 голосов
/ 07 февраля 2009

Вы можете сделать это, но только если оболочка работает как подпроцесс вашей программы на Python; Вы не можете передавать контент в стандартный поток родительского процесса. (Если бы вы могли, UNIX имел бы множество проблем с безопасностью, когда люди запускали процессы с меньшими привилегиями, чем у вызывающей оболочки!)

Если вы знакомы с тем, как Expect позволяет выполнять интерактивные подпроцессы (с определенными последовательностями клавиш от пользователя или строками, полученными от дочернего процесса, инициирующими совпадения и отправляющими управление обратно в вашу программу), то же это можно сделать из Python с pexpect . В качестве альтернативы, как упоминалось в другом посте, модуль curses обеспечивает полный контроль над отображением дисплеев терминалов - что вам нужно, если это меню истории происходит внутри окна, а не в графическом виде (X11 / win32). ) всплывающее окно.

3 голосов
/ 11 апреля 2009

См. readline модуль. Он реализует все эти функции.

1 голос
/ 07 февраля 2009

ncurses с его портом Python - путь, ИМХО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...