0

Is it possible to remove the prompt and the text that the user typed when using input()? I am using cmd on Windows 10 and would prefer a solution that works cross platform, but I don't really mind.

First attempt

Using the code:

user_input = input("Enter some text: ")
print("You just entered " + user_input)

produces:

Enter some text: hello
You just entered hello

but I would like:

Enter some text: hello

and then:

You just entered hello

Second attempt

I've used the getpass module, but that hides what the user is typing because it is designed for passwords. I looked at the code for getpass2 here and found that it uses the getch() function from msvcrt. I tried using a similar method, but it did not work. This code:

import msvcrt
prompt = "Enter some text: "
user_input = ""
print(prompt, end="\r")
current_character = ""
while current_character != "\r":
    current_character = msvcrt.getch()
    user_input += str(current_character, "utf8")
    print(prompt + user_input, end="\r")
print("You entered" + user_input)

produces this output:

Enter some text: h e l l o

and then when I press enter:

 nter some text: h e l l o

It also allows the user to use the backspace key to delete the prompt.

Third attempt

I know I can use os.system("cls") to clear everything in the console, but this removes text that was in the console before. For example, this code:

import os
print("foo")
user_input = input("Enter some text: ")
os.system("cls")
print("You just entered " + user_input)

removes the foo that was printed to the console before the input. If what I'm asking isn't directly possible, is there a workaround that can save the text in the console to a variable, and then after the user input clear the console and reprint the text that was in the console?

Hasnep
  • 121
  • 3
  • 10

1 Answers1

1

This is definitely not the optimal solution; However, in response to

is there a workaround that can save the text in the console to a variable

, you could keep appending the required text to a variable, and re-print that each time, as you suggested. Again, I would not recommend this as your actual implementation, but while we wait for someone to come along with the correct approach...

import os

to_print = ""
to_print += "foo" + "\n"
print(to_print)

user_input = input("Enter some text: ")
os.system("cls")

to_print += "You just entered " + user_input + "\n"
print(to_print)
Deem
  • 7,007
  • 2
  • 19
  • 23