当用户在 Python 中按下 Tab 键时,如何获取结束的用户输入?
How do I take a user input that ends when the user presses Tab in Python?
我一直在尝试寻找一种方法来获取以用户按 Tab 键结束的用户输入。我想要发生的是让用户键入注释并且在他们按下 Tab 之前它不会完成输入。
我正在尝试使用此方法,但不确定该怎么做。
text = input()
我希望用户在键入注释时能够在不完成输入的情况下按 Enter 键转到新的一行。只有当用户按下 Tab 键时,输入才会完成,文本才会存储到变量中。
您的要求听起来很简单,但不幸的是做起来并不容易。问题是从命令行到程序的输入是 line-buffered。也就是说,它一次只发送一行给程序。有一些困难的方法可以解决这个问题,但它们通常效果不佳。
如果你用你正在努力完成的事情来澄清你的问题,那么人们可能会提供更好的解决方案。同时,这里有一个简单的版本,如果用户按下 tab 然后输入:
def get_input_ending_with_tab():
inp = input() + "\n"
while not inp.endswith("\t\n"):
inp += input() + "\n"
return inp
这里有一个更复杂的版本,可以满足您的需求,但不适用于 Windows。这也仅适用于程序的交互式执行(当它附加到 TTY 时)。
import sys
import tty
import termios
def get_input_ending_with_tab_2():
buf = ""
stdin = sys.stdin.fileno()
tattr = termios.tcgetattr(stdin)
try:
tty.setcbreak(stdin, termios.TCSANOW)
while True:
buf += sys.stdin.read(1)
print(buf[-1], end="")
sys.stdout.flush()
if buf[-1] == "\t":
break
finally:
termios.tcsetattr(stdin, termios.TCSANOW, tattr)
print()
return buf
我一直在尝试寻找一种方法来获取以用户按 Tab 键结束的用户输入。我想要发生的是让用户键入注释并且在他们按下 Tab 之前它不会完成输入。
我正在尝试使用此方法,但不确定该怎么做。
text = input()
我希望用户在键入注释时能够在不完成输入的情况下按 Enter 键转到新的一行。只有当用户按下 Tab 键时,输入才会完成,文本才会存储到变量中。
您的要求听起来很简单,但不幸的是做起来并不容易。问题是从命令行到程序的输入是 line-buffered。也就是说,它一次只发送一行给程序。有一些困难的方法可以解决这个问题,但它们通常效果不佳。
如果你用你正在努力完成的事情来澄清你的问题,那么人们可能会提供更好的解决方案。同时,这里有一个简单的版本,如果用户按下 tab 然后输入:
def get_input_ending_with_tab():
inp = input() + "\n"
while not inp.endswith("\t\n"):
inp += input() + "\n"
return inp
这里有一个更复杂的版本,可以满足您的需求,但不适用于 Windows。这也仅适用于程序的交互式执行(当它附加到 TTY 时)。
import sys
import tty
import termios
def get_input_ending_with_tab_2():
buf = ""
stdin = sys.stdin.fileno()
tattr = termios.tcgetattr(stdin)
try:
tty.setcbreak(stdin, termios.TCSANOW)
while True:
buf += sys.stdin.read(1)
print(buf[-1], end="")
sys.stdout.flush()
if buf[-1] == "\t":
break
finally:
termios.tcsetattr(stdin, termios.TCSANOW, tattr)
print()
return buf