【问题标题】:How to not issue a new line in Python 3 when entering text with input()使用 input() 输入文本时如何在 Python 3 中不发出新行
【发布时间】:2013-05-10 20:01:22
【问题描述】:

我正在 Python 3 中制作一个基本实用程序,用户可以在其中输入命令并将反馈打印到控制台中。使用 input()sys.stdin.readline() 函数输入数据时,命令行会话可能看起来像这样(包括 \r 和 \n 字符)

1. What is your name:\n
2. <user input>\n
3. Your name is <variable>.\n

但是,我想在用户按回车键后显示\r 字符而不是\n 字符,如第 2 行所示。用户输入所有内容并按回车键后,它看起来像这样

1. What is your name:\n
2. Your name is <variable>.\n

(因为第 2 行在输入数据后会有一个\r 字符,将光标返回到最左边)

有谁知道我可以做到这一点的方法吗?

【问题讨论】:

  • 所以您想隐藏用户输入的内容并打印下一行?
  • @cmd 基本上,是的。同时也在同一行上打印下一行。 (这就是\b 字符不起作用的原因)
  • 鉴于您的其他问题,我假设您的目标是 Windows?
  • @ThomasFenzl 是的,我的目标是 Windows,尽管跨平台的方法会更好。
  • 也许使用 getpass,这会在他们键入时隐藏他们的输入。或在输入后清除屏幕。我不认为 python 对您正在查看的细节进行 c 光标操作。我知道你可以用 curses 很好地控制光标

标签: python command-line input python-3.x


【解决方案1】:

好吧,我发现了这种方法,尽管我几乎可以肯定 msvcrt 模块仅适用于 Windows。

import msvcrt
import sys

def msgInput(prompt):
    print(prompt, end='')
    data= b''
    while True:
        char= msvcrt.getch()
        if char != b'\r':
            print(char.decode(), end='')
            sys.stdout.flush()
            data= data+char
        else:
            print('\r', end='')
            break
    return data.decode()

如果有人知道任何跨平台方法,请分享。

更新 - 不幸的是,这种方法有很多限制,例如用户无法使用箭头键浏览输入的文本。

【讨论】:

    【解决方案2】:

    好吧,我相信我找到了您想要的解决方案:

    strng=input("Enter String - ")
    

    其中 strng 只是一个保存输入响应的变量。这将在解释器中返回字符串 Enter String - (不带任何引号)并允许您将响应保存在变量 strng 中。

    【讨论】:

    • 我早就停止了这个项目的开发,但我相信其目的是让用户能够输入文本(在终端窗口中)并让用户输入文本的行被删除一次用户按 Enter。这在 Python IDLE 控制台中绝对不可能,但在 Windows 控制台或 UNIX 终端中使用 msvcrtcurses 模块等高级技术是可能的。
    猜你喜欢
    • 2021-10-26
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多