python自动输入支付密码_Python之控制台输入密码的方法

一、raw_input()或input():

for python 2.x

[root@master test]#/usr/local/python2.7/bin/python test.py

Please input your password:123your passwordis 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:123your passwordis 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 passwordis 123[root@master test]#cat test.py#!/usr/bin/python#-*- coding=utf-8 -*-

importgetpass#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 passwordis 123[root@master test]#cat test.py#!/usr/bin/python#-*- coding=utf-8 -*-

importgetpass#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 passwordis 123[root@master test]#cat test.py#!/usr/bin/python#-*- coding=utf-8 -*-

importsys, tty, termios#for python 2.x

defgetch():

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)returnchdef getpass(maskchar = "*"):

password= ""

whileTrue:

ch=getch()if ch == "\r" or ch == "\n":print

returnpasswordelif 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+=chif __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 -*-

importsys, tty, termios#for python 3.x

defgetch():

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)returnchdef getpass(maskchar = "*"):

password= ""

whileTrue:

ch=getch()if ch == "\r" or ch == "\n":print

returnpasswordelif 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+=chif __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 passwordis:123

#!/usr/bin/python#-*- coding=utf-8 -*-

importmsvcrt,sysdefpwd_input():

chars=[]whileTrue:try:

newChar= msvcrt.getch().decode(encoding="utf-8")except:return input("你很可能不是在cmd命令行下运行,密码输入将不能隐藏:")if newChar in '\r\n': #如果是换行,则输入结束

break

elif newChar == '\b': #如果是退格,则删除密码末尾一位并且删除一个星号

ifchars: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.shPlease input yourpasswd: ***Your password is:123[root@master test]#cat passwd.sh#!/bin/shgetchar() {

stty cbreak-echo

dd if=/dev/tty bs=1 count=1 2> /dev/nullstty-cbreak echo}

printf"Please input your passwd:"

while : ; doret=`getchar`if [ x$ret = x ]; then

echobreakfistr="$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()exceptImportError:try:

self.impl=_GetchMacCarbon()exceptAttributeError:

self.impl=_GetchUnix()def __call__(self): returnself.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):importsys, 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)returnchclass_GetchWindows:def __init__(self):importmsvcrtdef __call__(self):importmsvcrtreturnmsvcrt.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):importCarbon

Carbon.Evt#see if it has this (in Unix, it doesn't)

def __call__(self):importCarbonif 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()importsysfor i inxrange(sys.maxint):

k=inkey()if k<>'':break

print 'you pressed',k

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值