密码写入系统:标准输出不再有效
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)
我目前正在做一个个人项目,我尝试创建一个密码函数。所以我写了这个脚本:
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)