2016-06-23 2 views
0

Я пытаюсь написать небольшой REPL, используя библиотеку cmd в Python. Одной из возможностей, которую он предоставляет, является автоматическое завершение табуляции, чего я не хочу.Настройка completekey = None удаляет функциональность со стрелкой вверх

К счастью, в документах упоминается «Если полная клавиша не является None и доступна readline, завершение команды выполняется автоматически». Поэтому я установил completekey=None, когда я создал экземпляр моего подкласса cmd.Cmd, который работал.

Однако основная функциональность cmd модуля, использование readline, который дает поддержку стрелка вверх истории, также была отключена, и теперь я вернулся к ^[[A «с.

Почему это происходит, и есть ли решение?

+0

Это, вероятно, происходит потому, что, когда 'completekey = None', то' readline' модуль никогда не загружен (см [источник] (https://hg.python.org/cpython/file/3.5/Lib/ cmd.py). Вы можете работать с помощью подкласса 'cmd.Cmd', переопределяя либо' cmdloop', либо переопределяющие 'complete' методы. – Evert

ответ

2

Модуль readline импортируется только в том случае, если completekey имеет значение, отличное от None. Похоже, что единственный способ использовать readline и отключить завершение - указать ничего не сделанное.

class CmdSubclass(Cmd): 
    # Other configuration 
    # ... 

    def complete(self, *args): 
     pass 
+0

Приятно, спасибо! Принимая. – Maltysen

+0

это не позволяет войти в исходные вкладки, но я думаю, что смогу с этим справиться. – Maltysen

+0

Вы также можете установить 'completekey' на что-то еще, что вам не нужно использовать так часто. – chepner