【问题标题】:How do I take a user input that ends when the user presses Tab in Python?当用户在 Python 中按下 Tab 时,如何获取用户输入?
【发布时间】:2020-08-25 02:17:43
【问题描述】:

我一直在尝试寻找一种方法来获取以用户按 Tab 结束的用户输入。我想要发生的事情是让用户输入注释,并且在他们按下 Tab 之前它不会完成输入。

我尝试使用此方法,但不知道该怎么做。

text = input()

我希望用户键入注释并能够在不完成输入的情况下按 Enter 进入新行。只有当用户按下 Tab 时,输入才会完成,文本才会存储到变量中。

【问题讨论】:

标签: python string variables user-input


【解决方案1】:

您所要求的内容听起来很简单,但不幸的是,要做到这一点并不容易。问题是从命令行到程序的输入是行缓冲的。也就是说,它一次只被发送到程序一行。有一些困难的方法可以解决这个问题,但它们通常效果不佳。

如果您用比这更高一级所要完成的任务来澄清您的问题,人们或许能够提供更好的解决方案。同时,这里有一个简单的版本,如果用户按下 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多