使用input()
时是否可以删除提示和用户键入的文本?我在Windows 10上使用cmd,并且希望使用一种跨平台的解决方案,但我并不介意。
使用代码:
user_input = input("Enter some text: ")
print("You just entered " + user_input)
产生:
Enter some text: hello
You just entered hello
但是我想要:
Enter some text: hello
然后:
You just entered hello
我使用了getpass模块,但是它隐藏了用户正在输入的内容,因为它是为密码而设计的。我查看了getpass2
here的代码,发现它使用了getch()
中的msvcrt
函数。我尝试使用类似的方法,但是没有用。这段代码:
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)
产生以下输出:
Enter some text: h e l l o
,然后按Enter键:
nter some text: h e l l o
它还允许用户使用退格键删除提示。
我知道我可以使用os.system("cls")
清除控制台中的所有内容,但这会删除之前控制台中的文本。例如,这段代码:
import os
print("foo")
user_input = input("Enter some text: ")
os.system("cls")
print("You just entered " + user_input)
删除输入之前打印到控制台的foo
。如果我要问的不是直接可行的,是否有一种解决方法可以将控制台中的文本保存到变量中,然后在用户输入后清除控制台并重新打印控制台中的文本?
答案 0 :(得分:1)
这绝对不是最佳解决方案; 但是,针对
有没有一种解决方法可以将控制台中的文本保存到 变量
,您可以继续将所需的文本附加到变量中,然后按照您的建议每次重新打印。同样,我不建议您将其作为实际的实现方式,但是在我们等待有人提出正确的方法时...
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)