一. 所支持功能
python脚本命名为passwd.py
- help
使用help可以查看脚本介绍。用法脚本名+help:
./passwd help - set
使用set增加密码或修改密码。用法脚本名+set+密码索引+密码:
./passwd set QQ xxxxx - get
使用get获得已存在的密码。用法脚本名+get+密码索引:
./passwd get QQ - list
使用list获得已存在的密码索引。用法脚本名+list:
./passwd list - del
使用del删除指定的密码索引。用法脚本名+del+密码索引:
./passwd del QQ
二. 代码
import shelve
import sys
op_can_be = ('set', 'get', 'list', 'del', 'help')
def usage():
print('usage: -----------------------')
print("python name: passwd.py")
print("option can select: set/get/list/del ")
print("set: ./passwd.py set QQ sanshi7777777")
print("get ./passwd.py get QQ")
print("list: ./passwd.py list")
print("del: ./passwd.py del QQ")
print("help: ./passwd.py help")
def happen_error():
print("wrong use\n")
usage()
sys.exit()
def main():
#使用shelve文件保存数据
passwd_text = shelve.open('passwd')
try:
#检查参数有效性,并得到操作类型
op_type = sys.argv[1]
if (op_type not in op_can_be):
happen_error()
#list和help操作不需要密码索引
if (op_type not in ('list', 'help')):
passwd_index = sys.argv[2]
exist = passwd_index in passwd_text
#定义各自类型各自的操作
if (op_type == 'get'):
if (exist):
print("[%s]'s passwd is [%s]" %(passwd_index ,passwd_text[passwd_index]))
else:
print(passwd_index+' not exist')
elif (op_type == 'set'):
passwd = sys.argv[3]
if (exist):
print("before [%s]'s passwd is [%s]" %(passwd_index, passwd_text[passwd_index]))
else:
print(passwd_index+' before is not exist, now begin set')
passwd_text[passwd_index] = passwd
print("set[%s] to [%s]" %(passwd_index, passwd_text[passwd_index]))
elif (op_type == 'list'):
for passwd_index in passwd_text.keys():
print(passwd_index)
elif (op_type == 'help'):
usage()
else:
if (exist):
passwd = passwd_text.pop(passwd_index)
print("passwd_index:%s" %(passwd_index))
print("passwd:%s" %(passwd))
print("this item have been delete")
else:
print(passwd_index+' not exist')
#关闭文件
passwd_text.close()
except Exception:
happen_error()
if (__name__ == '__main__'):
main()
三. 简单介绍
- 使用sys模块来获取命令行参数。
- 使用shelve将程序数据进行保存,shelve默认可读可写。shelve保存时相当于字典,一个索引对应一系列数据。
- 所有操作基本与操作字典相同。
- shelve保存数据在文本中,要想对数据加密,还需要了解数据加密相关。