@romazhan

Как печатать текст перед input() в Python?

В Python можно ли запрашивать ввод данных пользователем с помощью input() в консоли, одновременно распечатывая текст в строке ДО приглашения? Это должно выглядеть примерно так:

Text 1
Text 2
Text 3
Please enter something: abc

Всякий раз, когда печатается новый текст, он должен быть напечатан после предыдущего текста и до приглашения input(). Также не следует прерывать ввод текста пользователем.

Поэтому после печати "Текст 4" консоль должна выглядеть так:

Text 1
Text 2
Text 3
Text 4
Please enter something: abc

Возможно ли это сделать в Python без использования каких-либо внешних библиотек?

Я уже пытался использовать \r, \b и аналогичные коды, а также потоки. Я также знаю, что мне, вероятно, понадобится, чтобы одна нить распечатывала текст, а у меня другая, запрашивающая ввод пользователя.
  • Вопрос задан
  • 932 просмотра
Решения вопроса 1
@romazhan Автор вопроса
#-*- coding: utf-8 -*-
from threading import Thread
from time import sleep


def counter() -> None:
    i = 0
    while(True):
        sleep(0.8)
        i += 1
        print(i)

def cmd() -> None:
    while(True):
        print(f'\x1b[FCommand: {input()}')

Thread(target=counter).start()
Thread(target=cmd).start()

Видимо только так.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@kisaa
А просто
x = input("Please enter something:")
вас не устраивает? Или надо непременно удалять фразу приглашения с экрана?
Ответ написан
HemulGM
@HemulGM Куратор тега Python
Delphi Developer, сис. админ
while True:
  print(text)
  x = input('enter some...:')
  text = text + x
  clr

Псевдо код, где clr - очистка консоли
Ответ написан
Комментировать
@Kvason
Веб-разработчик
import os
text='text1'
for i in range(5):
    print(text)
    newtext=input('Enter something')
    text+='\n'+newtext
    os.system('clear') #либо cls для винды
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Либо очищать терминал и перевыводить содержимое, либо использовать ncurses (но это только под линукс, под винду нужно искать тот или иной порт).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы