如何解决当用户按下Python中的Tab键时,如何接收结束的用户输入?
我一直在尝试找到一种方法来接受用户输入,并以用户按Tab键结束。我想让用户输入便笺,直到他们按Tab才完成输入。
我试图使用此方法,但不确定该怎么做。
text = input()
我希望用户在不完成输入的情况下按Enter即可输入注释并能够转到新行。只有用户按下Tab键,输入才会完成,文本将存储到变量中。
解决方法
您要的内容听起来很简单,但是不幸的是,这并非易事。问题是从命令行到程序的输入是行缓冲的。也就是说,它一次只能发送到程序一行。有一些解决此问题的困难方法,但是它们通常效果不佳。
如果您通过尝试达到一个以上的水平来澄清您的问题,人们可能会提供更好的解决方案。同时,这是一个简单的版本,如果用户按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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。