Интерактивная консоль Python с использованием функции curses lib getstr () не ждет ввода пользователя - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь создать интерактивную консоль, используя curses lib.

, похожую на эту:

import curses

if __name__ == '__main__':
    stdscr = curses.initscr()
    stdscr.nodelay(False)
    curses.echo()
    curses.nonl()

while True:
    stdscr.addstr('#')
    stdscr.refresh()
    command = stdscr.getstr()

    if not command:
        continue

    if command == b'xys':
        stdscr.addstr('Execute xys block and print result')

    elif command == b'qwe':
        stdscr.addstr('Execute qwe block and print result')

    # ...

Но она возвращает это:

#xys
Execute xys block and print result#
#qwe
Execute qwe block and print result#
#
#
#

(после строки Execute qwe block and print result# я нажал клавишу enter)

Функция stdscr.getstr() ожидает ввода только половину времени.Другая половина command = '' без какого-либо ввода.Вот почему вы видите двойной знак # или знак # в конце каждого вывода.

Ожидаемый результат должен быть:

#xys
Execute xys block and print result
#qwe
Execute qwe block and print result
#

Любая рекомендация?

1 Ответ

0 голосов
/ 10 мая 2018

Я использовал терминал pyCharm (с проверкой run> edit configurations...> emulate terminal in output console), но, очевидно, curses lib и pyCharm не совместимы.

При запуске скрипта в обычном терминале он работал отлично.

Надеюсь, это кому-нибудь поможет!

...