blog addr: http://www.cnblogs.com/uyahs/p/7667783.html
program summary:
该程序运行在python3.X环境中
该程序共两个文件,需要放在同一目录下。
主程序为zuoye_login.py
zuoye_login.txt 为存储账号信息的文件,如需增加账号密码格式如下:
user:password;0
程序运行后会先进行账号密码的输入,输入后程序会从密码文本中进行查找和比对信息,如果正确则显示成功信息
如果失败则对该账号记录1次错误登陆,超过三次错误登陆,则锁定该账号100秒。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Xtian
'''
这是一个登陆模块,账号密码保存在同目录下zuoye_login.txt文件下
zoye_login.txt文件格式如:root;server;0 分别是账号,密码,登陆失败次数,三个值之间用分号分隔
运行此程序后,如果密码错误则会对该账号记录一次错误,超过三次则锁定该账号100秒。
'''
import getpass
import time
login_status = 0 #这个值为登陆状态,如果等于1表示登陆验证成功
while True:
f = open('zuoye_login.txt','r+')
text = f.read().split('
')
f.close()
guess_user = input("user:")
guess_passwd = getpass.getpass("password:")
for j in range(len(text)):
if guess_user == text[j].split(';')[0]:
if int(text[j].split(';')[2]) > 2: #如果该账号密码登陆错误次数超过2
localtime = time.localtime(time.time())
now_time = int(time.mktime(localtime)) #获取现在的时间戳
unit_time = int(now_time)-int(text[j].split(';')[3]) #计算出当前时间和记录时间差
if unit_time > 100: #将时间差与100比较,超过100则可以继续
text[j] = "%s;%s;0" % (text[j].split(';')[0],text[j].split(';')[1]) #将失败次数重置为0
new_text = '
'.join(text)
f = open('zuoye_login.txt', 'w')
f.writelines(new_text)
f.close()
else: #时间差不足100秒,按照登陆失败重新循环
wait_time = 100 - unit_time #当前还需要等待的时间(秒)
print("There are too many errors,please wait for %s second" % (wait_time))
input("please input 'ENTER' to try again")
break
if guess_passwd == text[j].split(';')[1]: #判断密码是否正确
login_status = 1 #将登陆状态更改为1,表示登陆成功
break
else:
if text[j].split(';')[2]: #判断zuoye_login.txt文件中这个账号中的失败次数不为空时进行
failed_count = int(text[j].split(';')[2]) #获取该账号失败次数
failed_count += 1 #将该账号失败次数+1
localtime = time.localtime(time.time())
failed_login_time = int(time.mktime(localtime)) #获取登陆失败时的时间戳,并存入文件
text[j] = "%s;%s;%s;%d" % (text[j].split(';')[0],text[j].split(';')[1],failed_count,failed_login_time)
new_text = '
'.join(text)
f = open('zuoye_login.txt','w')
f.writelines(new_text)
f.close()
else: #如果zuoye_login.txt文件中此账号的失败次数为空则添加一个失败次数的值
text[j] = "%s;%s;%s;%s" % (text[j].split(';')[0],text[j].split(';')[1],failed_count,failed_login_time)
new_text = '
'.join(text)
f = open('zuoye_login.txt', 'w')
f.writelines(new_text)
f.close()
else:
continue
if login_status == 1: #判断是否登陆成功
print("login success !")
print("welcome ", guess_user)
break
else:
print("login failed !")