在Python中获取命令行密码输入

Nac*_*cht 204 python passwords command-line

你知道如何在Linux中尝试一些Sudo的东西它会告诉你输入密码,当你输入时,终端窗口中没有显示任何内容(密码没有显示)?

有没有办法在Python中做到这一点?我正在编写一个需要如此敏感信息的脚本,并希望在我输入时隐藏它.

换句话说,我想从用户那里获取密码而不显示密码.

Sve*_*ach 260

用途getpass.getpass():

from getpass import getpass
password = getpass()
Run Code Online (Sandbox Code Playgroud)

可选的提示可以作为参数传递; 默认是"Password: ".

请注意,此功能需要一个正确的终端,因此它可以关闭键入字符的回显 - 有关详细信息,请参阅从IDLE运行时的"GetPassWarning:无法控制终端上的回显".

  • @ asf107:如果黑客可以编辑源代码,还有其他问题需要担心. (118认同)
  • @ asf107 - 请求密码的想法是,你可以传递它来验证某些东西(IE,我用它来请求密码来验证在线服务器).如果黑客注释掉该行,该程序将会失败,因为服务器将不再进行身份验证.使用`getpass()`背后的想法是,没有人可以通过阅读来查看源代码并找到你的密码,没有人可以通过盯着你的肩膀并在屏幕上读取密码来获取密码输入它. (9认同)

Naf*_*ipt 154

import getpass

pswd = getpass.getpass('Password:')
Run Code Online (Sandbox Code Playgroud)

getpass适用于Linux,Windows和Mac.

  • "密码:"(冒号后面有空格)是默认提示符,因此通常无需在调用getpass.getpass()时指定它. (11认同)
  • 这给了我一个错误`警告(来自警告模块):文件“C:\ Python27 \ lib \ getpass.py”,第92行返回fallback_getpass(提示,流)GetPassWarning:无法控制终端上的回显。警告:密码输入可能会回显。` 在 IDLE 中,但在命令提示符下运行良好,找到原因[此处](/sf/ask/2721511901/从空闲运行) (2认同)

Ran*_*Rag 26

为此目的使用getpass.

getpass.getpass - 在没有回显的情况下提示用户输入密码


小智 11

import sys
import msvcrt

passwor = ''
while True:
    x = msvcrt.getch()
    if x == '\r':
        break
    sys.stdout.write('*')
    passwor +=x

print '\n'+passwor
Run Code Online (Sandbox Code Playgroud)

此代码将打印星号而不是每个字母.

  • 这只是windows,但至少它没有重复`getpass`的答案.好 (6认同)
  • 不会处理退格. (2认同)
  • @Larper它适用于Python 2,请参阅代码的最后一行 (2认同)