Я пытаюсь создать интерактивную программу командной строки, используя строку чтения в python.
Файл run.py содержит следующий код:
import readline
class SimpleCompleter(object):
def __init__(self, options):
self.options = sorted(options)
return
def complete(self, text, state):
response = None
if state == 0:
# This is the first time for this text, so build a match list.
if text:
self.matches = [s for s in self.options if s and s.startswith(text)]
else:
self.matches = self.options[:]
try:
response = self.matches[state]
except IndexError:
response = None
return response
def input_loop():
line = ''
while line != 'stop':
line = input('Prompt ("stop" to quit): ')
print(f'Dispatch {line}')
# Register our completer function
completer = SimpleCompleter(['start', 'stop', 'list', 'print'])
readline.set_completer(completer.complete)
# Use the tab key for completion
readline.parse_and_bind('tab: complete')
# Prompt the user for text
input_loop()
Проблема в том, когда Я пытаюсь запустить файл прямо с терминала (например, python run.py ), клавиша TAB не считается клавишей автозаполнения, вместо этого она считается 4 пробелами, поэтому я не получил предложений, когда Я дважды нажимаю клавишу TAB; Однако, если я импортировал файл из консоли python (например, import run.py ), клавиша TAB считается клавишей автозаполнения, и я получил ожидаемые предложения.
Кажется, что проблема находится в строке
readline.parse_and_bind('tab: complete')
, поэтому я попытался поместить ее в отдельный файл конфигурации, как указано здесь , но проблема осталась той же.
Итак вопрос в том, почему это происходит? и как это исправить.