密码写入系统:标准输出不再有效

Password writing system: standard output no longer works

我目前正在做一个个人项目,我尝试创建一个密码函数。所以我写了这个脚本:

import getch
import sys

print("votre mot de passe : ", end="")
passwor = ''
while True:
    x = getch.getch()
    if x == '\n':
        break
    sys.stdout.write("*")
    passwor += x

print('\n'+passwor)

但我遇到了一个问题:我的输出控制台上没有显示任何内容 看来问题来自打印的 end="" 参数和 sys.stdout.write("")。我尝试将两者都删除并且它正常工作(我通过 print("*") 更改 sys.stdout.write(""))。 我做了一些研究,找到了一个解决方案:如果我 运行 我的脚本像: python3 -u <my_script> 它有效 但是我想在另一个文件上调用这个函数......所以如果我可以 运行 我的 scipt 没有 -u 参数,那应该很棒...... 是否存在解决方案? 仅供参考:[os:debian(wsl),version:python3.7.3]

如果您使用的是Python 3.3 或更高版本,您可以写入print("votre mot de passe : ", end="", flush=True),它会自动强制Python 将输出缓冲区中的所有内容写入终端。您也可以在打印后写入 sys.stdout.flush() 来手动刷新输出缓冲区。

试试这个。它不会用 * 替换密码字符,但它会在您键入时不向标准输出打印任何内容。

from getpass import getpass

password = getpass(prompt="votre mot de passe: ")
print(password)