我正在寻找一种提示输入密码的方法(即没有输入回显)。我在 WebSphere 的 7.0.0.19 wsadmin 中使用 jython。
我一直在寻找它 - 使用 import getpass 或 import termios 似乎是可能的(但我得到“没有名为...的模块”异常)。
有什么办法提示输入密码吗?
谢谢你。
您可以使用以下代码。它基本上使用 Java 的 console() 如果存在(请注意,控制台可能不会一直存在),否则使用 raw_input() 和密码屏蔽逻辑。
# if console is not available (ex: when invoked from a shell script or another java process)
# we need to fall back to use raw_input, but we should mask the password if we use it
import sys, thread, time, threading
from java.lang import String
def getPass(stream=None):
console = java.lang.System.console()
if console is None:
global p_stopMasking
if not stream:
stream = sys.stderr
try:
p_stopMasking = 0
threading.Thread(target=_doMasking,args=(stream,)).start()
password = raw_input()
p_stopMasking = 1
except Exception, e:
p_stopMasking = 1
print "Error Occured"
print e
exit()
else:
password = console.readPassword()
return String.valueOf(password)
def _doMasking(stream):
while not p_stopMasking:
stream.write("\010*")
#stream.write("\n")
stream.flush()
time.sleep(0.01)
def populateCredentials():
global username
global password
print 'Enter username:'
username = raw_input();
print 'Enter password:'
password = getPass(sys.stdout);
# start main
print 'start program...'
p_stopMasking= 1
username = None
password = None
populateCredentials()
print 'username is : ' + username
print 'password is : ' + password
以下内容也对我有用:
raw_input("")
myPass = raw_input("Please enter a password: ")
这并不完美,因为它不会掩盖密码,但它确实有效。出于某种原因,如果您没有指定第一个“raw_input”调用,则脚本不会阻塞第二个调用。