StringIO經常被用來作字符串的緩存,因為StringIO的一些接口和文件操作是一致的,也就是說同樣的代碼,可以同時當成文件操作或者StringIO操作。
一、StringIO中的常用方法
1、read
用法:
s.read([n]):參數n用於限定讀取的長度,類型為int,默認為從當前位置讀取對象s中所有的數據。讀取結束后,位置被移動。
2、readline
用法:
s.readline([length]):length用於限定讀取的結束位置,類型為int,缺省為None,即從當前位置讀取至下一個以'\n'為結束符的當前行。讀位置被移動。
3、readlines
用法:
s.readlines():讀取所有行
4、write
用法:
s.write(s):從讀寫位置將參數s寫入到對象s。參數為str或unicode類型,讀寫位置被移動。
5、writeline
用法:
s.writeline(s):從讀寫位置將list寫入給對象s。參數list為一個列表,列表的成員為str或unicode類型。讀寫位置被移動
6、getvalue
用法:
s.getvalue():返回對象s中的所有數據
7、truncate
用法:
s.truncate([size]):從讀寫位置起切斷數據,參數size限定裁剪長度,默認為None
8、tell
用法:
s.tell() #返回當前讀寫位置
9、seek
用法:
s.seek(pos[,mode]):移動當前讀寫位置至pos處,可選參數mode為0時將讀寫位置移動到pos處,為1時將讀寫位置從當前位置移動pos個長度,為2時讀寫位置置於末尾處再向后移動pos個長度。默認為0
10、close
用法:
s.close():釋放緩沖區,執行此函數后,數據將被釋放,也不可再進行操作。
11、isatty
用法:
s.isatty():此函數總是返回0。不論StringIO對象是否已被close。
12、flush
用法:
s.flush():刷新緩沖區。
二、String使用示例
下面是一個利用StringIO緩沖及paramiko的RSAKey生成密鑰對函數:
#!/usr/bin/env python #coding: utf-8 import StringIO import os from paramiko import RSAKey def gen_keys(key=""): """ 生成公鑰 私鑰 """ output = StringIO.StringIO() sbuffer = StringIO.StringIO() key_content = {} #如果私鑰不存在,生成一個私鑰,並將私鑰緩存到output中 if not key: try: key = RSAKey.generate(2048) key.write_private_key(output) private_key = output.getvalue() except IOError: raise IOError('gen_keys: there was an error writing to the file') except SSHException: raise SSHException('gen_keys: the key is invalid') #如果私鑰存在,直接獲取該私鑰 else: private_key = key output.write(private_key) print output.getvalue() try: key = RSAKey.from_private_key(output) except SSHException, e: #raise SSHException(e) print e #利用上面的私鑰生成公鑰 for data in [key.get_name(), " ", key.get_base64(), " %s@%s" % ("yap", os.uname()[1])]: sbuffer.write(data) public_key = sbuffer.getvalue() key_content['public_key'] = public_key key_content['private_key'] = private_key #logger.info('gen_keys: key content:%s' % key_content) return key_content ga = gen_keys() print ga
執行的結果輸出如下:
{'public_key': u'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDr1wB1+waFdjkhXcJ2xj5YNbYTpXTsiTuFNHptz256MNOIVHM97p8Bzzi2SUOecU7Ol8oOc+UIqqjUsu62tSpwqRAhTPizTt7uo/E6rbuiyw9mV9BYj5uyrHHdvqbh0vHNUJmI3k6HX7WSOkHrhgeLjMIil+0oSAvtlmEtXxQAAkupOy0pM95vRJFtWPv9+ehf66FKBXjytAmIUQjVD63zXJzGza5/8oa/OmIhqtc7kN+cmgZsNCq1xiDYMUy+3CayCDcSMAb9HtOVrxApNLiJJ0QQlrgNy4bDLtg0g5EVVBAnFqmVjVWq7nPtqKFfPigSUAnAxECGdEtu2XJplOET yap@mysoft-ci', 'private_key': u'-----BEGIN RSA PRIVATE KEY-----\nMIIEpgIBAAKCAQEA69cAdfsGhXY5IV3CdsY+WDW2E6V07Ik7hTR6bc9uejDTiFRz\nPe6fAc84tklDnnFOzpfKDnPlCKqo1LLutrUqcKkQIUz4s07e7qPxOq27ossPZlfQ\nWI+bsqxx3b6m4dLxzVCZiN5Oh1+1kjpB64YHi4zCIpftKEgL7ZZhLV8UAAJLqTst\nKTPeb0SRbVj7/fnoX+uhSgV48rQJiFEI1Q+t81ycxs2uf/KGvzpiIarXO5DfnJoG\nbDQqtcYg2DFMvtwmsgg3EjAG/R7Tla8QKTS4iSdEEJa4DcuGwy7YNIORFVQQJxap\nlY1Vqu5z7aihXz4oElAJwMRAhnRLbtlyaZThEwIDAQABAoIBAQDZJS8hci4A+GeF\n10RUBBgnM90fnbpYh8qrzTPko5c/HnHGFqu9HFZ/XgMDo9WEryM2iP/b6s24+xlU\nLiQpSgl3jdJyNuLOhhIxe/WCZ7BaJclaHASTZjaffrOgzgft6UIGHu4e3UFE19Tg\nfI9xggi0brfZDjWoXx3MdienlOFfVvkiJc0YB8fawHvSmbKbzu/M58wP4zZKv/wP\nIHyxH10CkTAHP2/KvQ00kKheFdx6IY3VF44u5UsM4ZvaCqkzaVqDgHkaUqBLBdug\nxMhE1etOnODm+f6qrk4BsZxsTORiheJyT97QS8KOzZV7ouBcoOzz8gB0Tglz+wT4\nHgOnVAHxAoGBAPvGxlvSaq0uKNRIPv+eyyHu2HDw/ehHo3T7HTFh4g/KjCNRVNAR\nTrAFhVn/bwFyuCxVMPeA3Zo+ZTBue5VA979rv22JFg4tM/vrkDAz1h+EvY+tp4Nv\naNHie6nQY6jJgPQybG/9UwVwk2nlmtwJtNvTHwsd/8Kzljp342dja1gfAoGBAO/L\nyfwNlRYxiXj2rqmt7NcSqhcFf4Qv3s3UMaUPMOr7jgAsQfMigDO/bTYGmOMqVrGa\ny3YnbCROxE2wjqE1vf4F+yWv+xEqX/3cd/rFyPb15x9+KtbkD11A4xzAURVYakpO\n6w/1TAbBFFDVVm15cHJ3ymJd6PGm5XYMvw+6P6iNAoGBAM2DoHBdHlSERDGbU0km\nXhsxshzmqesLZuJbA6ZGhtdq9t7xSXCZYAiQSRyAQyUEdk9Brrmox7payhAxbtES\n+eeXVOddKdKilTdCPi0KcvLBUFZSYlUIAKCp5VVk06R37rnl2tvDBRyAmuOq1rBb\nf/SbrVBOyXEtVCgfqlC/N2TzAoGBAMZa2VrA1XkFQwUncLV05DvH+aCPcLqkanXy\nN5qkpT9LFFw6P9dhy5CCoVEWRfNq+0lwlSrIU2D5MtJc4K6jaOSuh9/V4SWC2uKA\nM1LhtmnqYOOhFsio37iwyuzmfGvethV/kFuj+d6AalCvGA34bTaStnuF2QHDn311\n77mPw8alAoGBAK5cGdvlcPE1u/l9DMthjZjYwKp3dBm5sbBOiri+0l+ML5Aje+B+\nOJtKp1F4wqz4iA9SadeYJjBAqpnIXz405I5RcmDH2y1845k7gzN++6PEp+kbSmQV\n5DTiUiRtx9G7Woaz+L9ircyuuLkzJRrwTwQWeaMkaYt/OPpP8ERV+Aha\n-----END RSA PRIVATE KEY-----\n'}