很多時(shí)候在注冊(cè)一些比較重要的帳號(hào)潦匈,或者使用一些比較重要的接口的時(shí)候,需要使用到隨機(jī)字符串徙瓶,為了方便铣焊,我們?cè)O(shè)計(jì)這個(gè)腳本需要注意以下幾點(diǎn):
1. 我們的密碼字符主要從0-9/A-Z/a-z這些字符中隨機(jī)獲取。為了避免顯示混淆晶渠,我們?nèi)コ址械臄?shù)字0和字母o以及數(shù)字1和字母l凰荚。
2. 命令不帶參數(shù)的情況默認(rèn)產(chǎn)生16個(gè)字符的隨機(jī)密碼
3.命令可以帶一個(gè)參數(shù),表明需要產(chǎn)生的隨機(jī)密碼的長(zhǎng)度
4.要把密碼打印到Terminal上褒脯,同時(shí)需要**把隨機(jī)密碼發(fā)送到剪切板**便瑟,方便粘貼使用
5.把命令放置到系統(tǒng)系統(tǒng)路徑下面,方便直接使用命令番川。
代碼如下:
# -*- coding:utf-8 -*-
import string
import sys
import random
import subprocess
alnums = [x for x in string.letters + string.digits if x not in ('0', 'o', '1', 'l')] # 產(chǎn)生除了特殊字符之外的樣本
def genpass(n=16):
""" 產(chǎn)生隨機(jī)密碼到涂,默認(rèn)長(zhǎng)度為16個(gè)字符 """
passwd = list()
for i in range(n):
passwd += random.choice(alnums)
return ''.join(passwd)
def write_to_clipboard(output):
""" 把output內(nèi)容復(fù)制到剪貼板 """
process = subprocess.Popen('pbcopy', env={'LANG': 'en_US.UTF-8'}, stdin=subprocess.PIPE)
process.communicate(output.encode('utf-8'))
def main():
if len(sys.argv) == 1:
passwd = genpass()
print passwd
write_to_clipboard(passwd)
elif len(sys.argv) == 2:
try:
n = int(sys.argv[1])
except ValueError:
print 'Input length of the password'
else:
passwd = genpass(n)
print passwd
write_to_clipboard(passwd)
else:
print 'Only need a argument: length of the password'
if __name__ == '__main__':
main()
把腳本復(fù)制到/usr/local/bin下面名為genpass,賦予執(zhí)行權(quán)限sudo chmod 700 genpass, 然后就可以在Termianl中使用genpass命令了爽彤。