我正在开发一个后台运行的备份守护程序。该守护程序依赖于备份软件,在备份时需要加密密钥。由于守护进程无法访问控制台,因此我无法通过控制台询问密码。
我该如何轻松地创建提示框要求用户输入密码,并将其返回给应用程序(通过Python变量)?我使用的是Python 2.7。
我该如何轻松地创建提示框要求用户输入密码,并将其返回给应用程序(通过Python变量)?我使用的是Python 2.7。
因为你要求最简单的(Python 2.7):
import Tkinter, tkSimpleDialog
tkSimpleDialog.askstring("Password", "Enter password:", show='*')
对于Python 3.3版本:
import tkinter
tkinter.simpledialog.askstring("Password", "Enter password:", show='*')
对于 Python 3.6+:
import tkinter as tk
import tkinter.simpledialog
tk.Tk().withdraw()
tkinter.simpledialog.askstring("Password", "Enter password:", show='*')
from Tkinter import *
def getpwd():
password = ''
root = Tk()
pwdbox = Entry(root, show = '*')
def onpwdentry(evt):
password = pwdbox.get()
root.destroy()
def onokclick():
password = pwdbox.get()
root.destroy()
Label(root, text = 'Password').pack(side = 'top')
pwdbox.pack(side = 'top')
pwdbox.bind('<Return>', onpwdentry)
Button(root, command=onokclick, text = 'OK').pack(side = 'top')
root.mainloop()
return password
getpwd
中没有返回任何内容。此外,当我点击确定时,我会收到一个错误-onpwdentry()只需要一个参数。感谢您的快速回复。 - liamzebedee因为不是每个人都想使用TK,所以这里提供一个使用PyQt的脚本:
from PyQt5.QtWidgets import QApplication, QInputDialog, QLineEdit
import sys
app = QApplication(sys.argv)
qd = QInputDialog()
qd.setTextEchoMode(QLineEdit.Password)
qd.show()
app.exec()
因为通常不会仅仅为了玩乐而要求用户输入密码:
#!/bin/env python3
#passwordPrompt.py
from PyQt5.QtWidgets import QApplication, QInputDialog
import sys, time
def succFunc():
sys.stdout.write(qd.textValue())
sys.stdout.flush()
exit(0)
def failFunc():
exit(1)
app = QApplication(sys.argv)
qd = QInputDialog()
#QLineEdit.Password
qd.setTextEchoMode(2)
qd.rejected.connect(failFunc)
qd.accepted.connect(succFunc)
qd.show()
app.exec()
对应的Bash函数:
#!/bin/bash
passwordPrompt.py | tee
解决了@pycoder112358发布帖子的作用域问题:
from tkinter import *
PASSWORD = ''
def get_passwd():
global PASSWORD
root = Tk()
pwdbox = Entry(root, show = '*')
def onpwdentry(evt):
global PASSWORD
PASSWORD = pwdbox.get()
root.destroy()
def onokclick():
global PASSWORD
PASSWORD = pwdbox.get()
root.destroy()
Label(root, text = 'Password').pack(side = 'top')
pwdbox.pack(side = 'top')
pwdbox.bind('<Return>', onpwdentry)
Button(root, command=onokclick, text = 'OK').pack(side = 'top')
root.mainloop()
return PASSWORD
onpwdentry()
和 onokclick()
函数中使用全局变量。 - Pedro Lobitoimport Tkinter, tkSimpleDialog
root = Tkinter.Tk() # dialog needs a root window, or will create an "ugly" one for you
root.withdraw() # hide the root window
password = tkSimpleDialog.askstring("Password", "Enter password:", show='*', parent=root)
root.destroy() # clean up after yourself!