流程图如下:
最先考虑使用python中的list,以能取到user_list中的用户信息,但中途发现没有比较好的方法截取取密码,还是新手的缘故,最终选择了使用dict,以方便截取用户名以及相应的密码。
user_list格式如下:
xxx:xxx
xxx:xxx
xxx:xxx
user_lock格式如下:
xxx
xxx
xxx
Code:
#!/usr/bin/env python # encoding: utf-8 # Auther:ccorz Mail:ccniubi@163.com import time,getpass,os # 将输入用户赋值于user_name变量 # print('=============',os.popen('pwd').read()) user_name=input('请输入您的用户名:') # 打开文件user_list,user_lock,赋予读写权限 user_list=open('user_list','r+') user_lock=open('user_lock','r+') #设置日志文件,open如果,用追加模式 log_file=open('login.log','a+') # 设置一个退出标识符 break_flag=0 time_now=time.strftime('%Y-%m-%d %H:%M:%S') #遍历user_lock被锁用户文件 for line in user_lock: # 设置被锁用户的变量,strip()将字符串两边的空格符去掉 lock_name=line.strip() #判断输入用户是否与遍历用户相同 if user_name==lock_name: print('您的用户已被锁定...请尝试其他的用户') log_file.write(' %s:被锁定用户%s尝试登陆!'%(time_now,user_name)) #修改退出标识符的值,以便区分既在user_list,又在user_lock的用户 break_flag=1 #退出循环 break #将空字典赋予变量account account={} for line in user_list: #遍历user_list文件,将一行的字符串去掉空格,并按":"分割为key value,并将key value添加入dict中 account[line.strip().split(':')[0]]=line.strip().split(':')[1] # print(account) # break_flag==0用来区分在user_list,user_lock中同时存在的用户, # 如果没有此标识符,上面遍历锁用户文件也会执行以下程序 if user_name in account and break_flag==0: #设置计数器,初始值为0 count=0 #循环3次 while count < 3: password=input('请输入%s的密码:'%user_name) # 校验密码 if password==account[user_name]: print('欢迎登陆系统.......') log_file.write(' %s,user %s had login.'%(time_now,user_name)) # 退出循环 break else: # 密码错误,将计数器+1 count+=1 print('%s的密码错误,请重新输入,您还有%s次机会'% (user_name,3-count)) # 循环超过3次,执行下面命令 else: print('用户%s已经被锁定,请联系管理员!'%user_name) # 将密码输入超过3此的用户名添加进user_lock,写入日志文件 user_lock.write(' %s'%user_name) log_file.write(' %s:%s is locked!'%(time.strftime('%Y-%m-%d %H:%M:%S'),user_name)) if user_name not in account: # 33[1;44;33m.... 33[0m 高亮显示,并提醒用户无此用户,是否用此用户名注册 regis_or_quit=input('''