#python #terminal
#python #терминал
Вопрос:
Я пытаюсь создать очень простую программу на python, которая должна считывать входные данные от пользователя и соответствующим образом записывать выходные данные. Мне нужен вывод, подобный этому:
$./program.py
say something: Hello World
result: hello world
Дело в том, что мне нужно бесконечно читать входные данные, каждый раз, когда пользователь вводит данные, я бы хотел, чтобы печатные данные не препятствовали вводу запроса. Будет еще лучше, если не печатать новые строки, сохраняя вывод, как указано выше: строка для чтения, а другая для записи.
Я пытался использовать curses, но я не хочу, чтобы использовался экран с отверстиями, только две строки.
Комментарии:
1. Каждый раз, когда символ печатается в первой строке, он должен повторяться во второй строке?
Ответ №1:
Я считаю, что это то, что вы хотите:
import colorama
colorama.init()
no = 0
while True:
user_input = str(raw_input('33[2A'*no '33[KSay something: '))
print '33[KResult: ' user_input
no = 1
Вот как это выглядит после ввода строки:
Эта реализация работает в Windows, однако, если вы используете Linux, если я не ошибаюсь, в этом нет необходимости:
import colorama
colorama.init()
РЕДАКТИРОВАТЬ: немного изменил мой код, чтобы он не перезаписывал текст, который был напечатан до выполнения кода. Также добавлен образ рабочей реализации.
Ответ №2:
Вы можете сделать очень простой трюк:
from os import system
while True:
system('clear') # or 'cls' if you are running windows
user_input = input('say something:')
print('result: ' user_input)
input()
Комментарии:
1. Это очистит экран сразу после печати результата, поэтому вы его никогда не увидите
2. Не будет ли это «обновлять» экран только после нажатия клавиши Enter?
3. Конечно, это работает, но мне интересно, хочет ли OP обновлять экран при каждом «событии нажатия клавиши». Если это так, это было бы немного сложнее сделать.
4. ПОЦЕЛУЙ 🙂 Давайте побеспокоимся об этом позже. Если это не то решение, которое ищет OP, мы найдем что-то более сложное.
5. проблема в том, что очистка экрана прямо противоположна тому, что я ищу. Я хотел бы очистить только используемые две строки.