除去在Python最后STDOUT线(remove last STDOUT line in Pyth

2019-06-18 07:07发布

我试图找出如何抑制在stdout用户输入的显示。

raw_input()跟任何打印语句保留用户键入的内容。 getpass()不显示用户键入的内容,但它确实保留了“密码:”提示。

为了解决这个问题,我想,只除去最后一行(这从行的末尾删除换行以及)。

Answer 1:

你也许可以做你想做什么VT100控制码 。

事情是这样的,也许:

CURSOR_UP_ONE = '\x1b[1A'
ERASE_LINE = '\x1b[2K'
print(CURSOR_UP_ONE + ERASE_LINE)


Answer 2:

如果你正在做的是阅读的密码,使用getpass 。 有很多涉及安全地读取密码微妙的陷阱的; 它不是代码,你要自己写。

如果你正在做的事情不太安全关键,关闭终端回声可以用做termios模块。 (祝示例代码有没有一个不完整的,不安全的实施getpass ,叹了口气。但它确实表明您如何关闭终端回声。)

如果你在Windows上,有一个等效的,但是我不知道它是什么,它可能不会在Python标准库被暴露。



Answer 3:

我不能完全肯定,如果这个工程:也许你可以,只调用之前raw_input()替换sys.stdout与燕子输出你自定义的类文件对象。 紧接着的是,你可以设置sys.stdout回到它以前一直。

编辑:是这样的方法是行不通的,因为无论在屏幕上停留的用户类型。

控制台操作和键盘直接控制的另一种选择是诅咒 。



Answer 4:

下面的代码,基于Python的文档,使用termios模块,似乎你想要做什么(虽然它并不像紧凑VT100控制码):

def getpass(prompt="Password: "):
    import termios, sys
    fd = sys.stdin.fileno()
    old = termios.tcgetattr(fd)
    new = termios.tcgetattr(fd)
    new[3] = new[3] & ~termios.ECHO
    try:
        termios.tcsetattr(fd, termios.TCSADRAIN, new)
        passwd = raw_input(prompt)
        print '\r          \r',
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old)
    return passwd

p = getpass()

有两个棘手线:一条禁止回声,另一种清除您的密码提示剩余在该行的第一个位置。



Answer 5:

试试这个:

CURSOR_UP = '\033[F'
ERASE_LINE = '\033[K'
print(CURSOR_UP + ERASE_LINE)


文章来源: remove last STDOUT line in Python