Python之控制台输入密码的方法
一、raw_input()或input():
for python 2.x
[root@master test]# /usr/local/python2.7/bin/python test.py
Please input your password:123
your password is 123
[root@master test]# cat test.py
#!/usr/bin/python
# -*- coding=utf-8 -*- #for python 2.x
#input = raw_input("Please input your password:")
#print "your password is %s" %input
for python 3.x
[root@master test]# /usr/local/python3.4/bin/python3 test.py
Please input your password:123
your password is 123
[root@master test]# cat test.py
#!/usr/bin/python
# -*- coding=utf-8 -*- #for python 3.x
input = input("Please input your password:")
print ("your password is %s" %input)
Note:这种方法最简单,但是不安全,很容易暴露密码。
二、getpass.getpass():
for python 2.x
[root@master test]# /usr/local/python2.7/bin/python test.py
Please input your password:
your password is 123
[root@master test]# cat test.py
#!/usr/bin/python
# -*- coding=utf-8 -*- import getpass #for python 2.x
input = getpass.getpass("Please input your password:")
print "your password is %s" %input
for python 3.x
[root@master test]# /usr/local/python3.4/bin/python3 test.py
Please input your password:
your password is 123
[root@master test]# cat test.py
#!/usr/bin/python
# -*- coding=utf-8 -*- import getpass #for python 3.x
input = getpass.getpass("Please input your password:")
print ("your password is %s" %input)
Note:这种方法很安全,但是看不到输入的位数,让人看着有点不太习惯,而且没有退格效果。
三、termios:
for python 2.x
[root@master test]# /usr/local/python2.7/bin/python test.py
Enter your password:***
your password is 123
[root@master test]# cat test.py
#!/usr/bin/python
# -*- coding=utf-8 -*- import sys, tty, termios #for python 2.x
def getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def getpass(maskchar = "*"):
password = ""
while True:
ch = getch()
if ch == "\r" or ch == "\n":
return password
elif ch == "\b" or ord(ch) == 127:
if len(password) > 0:
sys.stdout.write("\b \b")
password = password[:-1]
else:
if maskchar != None:
sys.stdout.write(maskchar)
password += ch
if __name__ == "__main__":
print "Enter your password:",
password = getpass("*")
print "your password is %s" %password
for python 3.x
[root@master test]# /usr/local/python3.4/bin/python3 test.py
Enter your password:
***your password is 123
[root@master test]# cat test.py
#!/usr/bin/python
# -*- coding=utf-8 -*- import sys, tty, termios #for python 3.x
def getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def getpass(maskchar = "*"):
password = ""
while True:
ch = getch()
if ch == "\r" or ch == "\n":
return password
elif ch == "\b" or ord(ch) == 127:
if len(password) > 0:
sys.stdout.write("\b \b")
password = password[:-1]
else:
if maskchar != None:
sys.stdout.write(maskchar)
password += ch
if __name__ == "__main__":
print ("Enter your password:",)
password = getpass("*")
print ("your password is %s" %password)
Note:这种方法可以实现输入显示星号,而且还有退格功能,该方法仅在Linux上使用。
四、msvcrt.getch()
F:\Python\Alex\s12\zhulh>python test.py
Please input your password:
***
your password is:123 #!/usr/bin/python
# -*- coding=utf-8 -*-
import msvcrt,sys
def pwd_input():
chars = []
while True:
try:
newChar = msvcrt.getch().decode(encoding="utf-8")
except:
return input("你很可能不是在cmd命令行下运行,密码输入将不能隐藏:")
if newChar in '\r\n': # 如果是换行,则输入结束
break
elif newChar == '\b': # 如果是退格,则删除密码末尾一位并且删除一个星号
if chars:
del chars[-1]
msvcrt.putch('\b'.encode(encoding='utf-8')) # 光标回退一格
msvcrt.putch( ' '.encode(encoding='utf-8')) # 输出一个空格覆盖原来的星号
msvcrt.putch('\b'.encode(encoding='utf-8')) # 光标回退一格准备接受新的输入
else:
chars.append(newChar)
msvcrt.putch('*'.encode(encoding='utf-8')) # 显示为星号
return (''.join(chars) ) print("Please input your password:")
pwd = pwd_input()
print("\nyour password is:{0}".format(pwd))
sys.exit()
Note:这种方法可以实现输入显示星号,而且还有退格功能,该方法仅在Windows上使用。
在这里提供shell实现的输入密码显示星号的方法:
[root@master test]# sh ./passwd.sh
Please input your passwd: ***
Your password is:
[root@master test]# cat passwd.sh
#!/bin/sh getchar() {
stty cbreak -echo
dd if=/dev/tty bs= count= > /dev/null
stty -cbreak echo
} printf "Please input your passwd: " while : ; do
ret=`getchar`
if [ x$ret = x ]; then
echo
break
fi
str="$str$ret"
printf "*"
done
echo "Your password is: $str"
这里还有一个获取跨平台按键的例子:
class _Getch:
"""Gets a single character from standard input. Does not echo to the screen."""
def __init__(self):
try:
self.impl = _GetchWindows()
except ImportError:
try:
self.impl = _GetchMacCarbon()
except AttributeError:
self.impl = _GetchUnix() def __call__(self): return self.impl() class _GetchUnix:
def __init__(self):
import tty, sys, termios # import termios now or else you'll get the Unix version on the Mac def __call__(self):
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch class _GetchWindows:
def __init__(self):
import msvcrt def __call__(self):
import msvcrt
return msvcrt.getch() class _GetchMacCarbon:
"""
A function which returns the current ASCII key that is down;
if no ASCII key is down, the null string is returned. The
page http://www.mactech.com/macintosh-c/chap02-1.html was
very helpful in figuring out how to do this.
"""
def __init__(self):
import Carbon
Carbon.Evt #see if it has this (in Unix, it doesn't) def __call__(self):
import Carbon
if Carbon.Evt.EventAvail(0x0008)[0]==0: # 0x0008 is the keyDownMask
return ''
else:
#
# The event contains the following info:
# (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]
#
# The message (msg) contains the ASCII char which is
# extracted with the 0x000000FF charCodeMask; this
# number is converted to an ASCII character with chr() and
# returned
#
(what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]
return chr(msg & 0x000000FF) if __name__ == '__main__': # a little test
print 'Press a key'
inkey = _Getch()
import sys
for i in xrange(sys.maxint):
k=inkey()
if k<>'':break
print 'you pressed ',k
Python之控制台输入密码的方法的更多相关文章
- DAY2 Python 标准库 -> Getpass 模块 -> 命令行下输入密码的方法.
getpass 模块 getpass 模块提供了平台无关的在命令行下输入密码的方法. getpass(prompt) 会显示提示字符串, 关闭键盘的屏幕反馈, 然后读取密码. 如果提示参数省略, 那么 ...
- C#代码实现在控制台输入密码显示星号
在控制台输入的内容C#默认按照字符串进行处理,如果直接让用户一次输入完毕就很难实现 显示星号的功能.但是如果让用户一次只能输入一个字符就,在将用户输入的字符替换为星号就可以实现了! 首先,C#中能让用 ...
- python 2 控制台传参,解包,编码问题初探
python 2 控制台传参,需要从sys模块中导入argv,argv返回的第一个参数当前脚本(script)的文件名,后面是参数,参数个数必须和解包(unpack)时使用的参数个数一致 1.本例子演 ...
- (转)Python中的常见特殊方法—— repr方法
原文链接:https://www.cnblogs.com/tizer/p/11178473.html 在Python中有些方法名.属性名的前后都添加了双下划线,这种方法.属性通常都属于Python的特 ...
- Python中的常见特殊方法—— repr方法
在Python中有些方法名.属性名的前后都添加了双下划线,这种方法.属性通常都属于Python的特殊方法和特殊属性,开发者可以通过重写这些方法或者直接调用这些方法来实现特殊的功能.其实前面见过的构造方 ...
- 运行python程序不显示cmd方法
运行python程序不显示cmd方法 Pythonw xxx.py 将*.py改成*.pyw,然后执行*.pyw Python.exe和pythonw.exe不同: 执行时没有控制台窗口 所有向原有的 ...
- Python进阶学习之特殊方法实例详析
Python进阶学习之特殊方法实例详析 最近在学习python,学习到了一个之前没接触过的--特殊方法. 什么是特殊方法?当我们在设计一个类的时候,python中有一个用于初始化的方法$__init_ ...
- C#控制台输入密码星号显示
在Program类中的Main方法里: 1 public class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.Write ...
- 用 Python 排序数据的多种方法
用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...
随机推荐
- Java 获取当前系统时间方法比较
转载: http://blog.csdn.net/zzjjiandan/article/details/8372617 一. 获取当前系统时间和日期并格式化输出: import java.util.D ...
- 读《深入php面向对象、模式与实践》有感(二)
书中关于设计模式的介绍很详细. 一.单例模式 作者建了一个preferences类来解释什么是单例模式.这个preferences类并非我第一次见到,在android中也有这个类,不过以前都是只管用即 ...
- SQL异常:ORA-00936: missing expression
select * from t_user where id in()当条件in的内容为空时抛 java.sql.SQLException: ORA-00936: missing expression ...
- smarty 入门2(个人总结)
1.下载安装: 2.拷贝libs文件夹到web文件夹: 3.引入smarty类文件 // include './libs/Smarty.class.php'; 4.配置smarty // ...
- BizTalk动手实验(十四)AS2传输非EDI消息
1 课程简介 本课程通过AS2协议完成XML文件的传输过程,传输之后同步接收MDN确认信息.通过本课程熟悉AS2传输解决方案的基本开发与配置方法. 2 准备工作 为了模拟实际的B2B交互过程,本实验需 ...
- Openfire 的安装和配置
1. 下载最新的openfire安装文件 官方下载站点:http://www.igniterealtime.org/downloads/index.jsp#openfire 下载地址: Exe:htt ...
- Android课程---final关键字
final 在Java中声明属性.方法和类时,可使用关键字final来修饰. final变量即为常量,只能赋值一次: final方法不能被子类重写: final ...
- IOS第13天(1,私人通讯录,登陆功能,界面的跳转传值,自定义cell,编辑界面)
******HMLoginViewController 登陆的界面 #import "HMLoginViewController.h" #import "MBProgre ...
- LaTex 数学公式
\usepackage{amsmath} 常用宏包 \usepackage{arydshln} 此宏包带虚线 $ $ 行内公式 $$ $$ 行间公式 \[ \] 行间公式 \numberwithin{ ...
- 【iCore3 双核心板】例程一:ARM驱动三色LED
实验指导书及代码包下载: http://pan.baidu.com/s/1o6w6Xnk iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...