gevent、argparse、和paramiko
来源:互联网 发布:手工制鞋 知乎 编辑:程序博客网 时间:2024/05/16 18:16
一、gevent
利用greenlet实现的基于协程的python网络库
使用gevent建立一个tcp服务器:
创建一个gevent.server.StreamServer实例,将服务器处理代理写入handle_echo函数,设置服务器地址和端口,最后启动服务器
from gevent import socketfrom gevent.server import StreamServerdef handle_echo(sock, address): fp = sock.makefile() while True: line = fp.readline() if line: fp.write(line) fp.flush() else: break sock.shutdown(socket.SHUT_WR) sock.close()
server = StreamServer(('', 1234), handle_echo)server.serve_forever()
预先设定监听套接字,取代('', 1234)
sock = socket.socket()sock.bind(('', 1234))sock.listen(256)server = StreamServer(sock, handle_echo)server.serve_forever()
ssh连接
通过使用gevent.ssl.socket创建一个提供加密的SSH监听套接字。
server = StreamServer(('', 1234), handle_echo,keyfile='server.key', certfile='server.crt')
二、参数解析器argparse
设置一个解析器
import argparseparser = argparse.ArgumentParser(description='This is a PyMOTW sample program')
参数可以触发不同的动作,动作由 add_argument() 方法的 action 参数指定。
支持的动作包括保存参数(逐个地,或者作为列表的一部分),当解析到某参数时保存一个常量值(包括对布尔开关真/假值的特殊处理),统计某个参数出现的次数,以及调用一个回调函数。
默认的动作是保存参数值。在这种情况下,如果提供一个类型,那么在存储之前会先把该参数值转换成该类型。如果提供 dest 参数,参数值就保存为命令行参数解析时返回的命名空间对象中名为该 dest 参数值的一个属性。
parser.add_argument('-a', action="store_true", default=False)parser.add_argument('-b', action="store", dest="b")parser.add_argument('-c', action="store", dest="c", type=int)
解析命令行 parse_args()
定义了所有参数之后,可以给 parse_args() 传递一组参数字符串来解析命令行。默认情况下,参数是从 sys.argv[1:] 中获取,但也可以传递自己的参数列表。选项是使用GNU/POSIX语法来处理的,所以在序列中选项和参数值可以混合。
parse_args() 的返回值是一个命名空间,包含传递给命令的参数。该对象将参数保存其属性,因此如果参数 dest 是 "myoption",那么可以args.myoption 来访问该值。
print parser.parse_args(['-a', '-bval', '-c', '3'])
有几种方式传递值给单字符选项。以上例子使用了两种不同的形式,-bval和-c val。
Namespace(a=True, b='val', c=3)布尔型参数a,字符串型参数b,整数参数c
三、paramiko
python的paramiko模块提供了SSH2协议下的远程服务器机连接功能,支持加密和认证的方式。在本项目中,我主要关注它对服务器端的接口重构问题。
class paramiko.server.ServerInterface
ServerInterface类提供了对服务器端进行控制的接口。
check_auth_publickey(username, key)
该方法用来判定客户端是否符合认证。重载该方法来检查用户名和key。如果 key 不被接受返回 AUTH_FAILED,否则返回 AUTH_SUCCESSFUL。
check_channel_request(kind, chanid)当客户认证完成后请求一个channel时,该方法在服务器中被调用。成功则返回 OPEN_SUCCEEDED,否则返回错误代码如下:
OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
OPEN_FAILED_CONNECT_FAILED
OPEN_FAILED_UNKNOWN_CHANNEL_TYPE
OPEN_FAILED_RESOURCE_SHORTAGE
默认情况下总是返回 OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
参数 kind (str) 客户端想打开的channel类型,一般为"session"
chanid (int) channel 的 id,只有在返回OPEN_SUCCEEDED后才会创建该 channel 对象,Channel.get_id 得到id号
get_allowed_auths(username)
该方法返回服务器认证的方法 list 。这个 list 是字符串,通常是 “password” "publickey" "none" 等 。默认返回 “password”
参数 username (str) 要求认证的用户名
- gevent、argparse、和paramiko
- Meinheld 和 Gevent
- gevent和twisted对比
- gevent和tornado异步
- paramiko安装和使用
- argparse
- argparse
- argparse
- argparse
- argparse
- gevent
- GEVENT
- gevent
- gevent
- paramiko
- paramiko
- paramiko
- paramiko
- 入门--JTBC系统学习(1)
- uva 11624Fire!(搜索:BFS)
- WM_CLOSE,WM_QUIT,WM_DESTROY的区别
- 设置编译器位数
- OpenCV学习笔记(四十一)——再看基础数据结构core
- gevent、argparse、和paramiko
- Margin-Border-Padding
- QQ窗口的控制,同步异步打开360网盘,控制360网盘窗口的移动
- hdu 1907 John
- POJ-3255-次短路问题
- 反转一个字符串
- 看电视法国红酒开发的是个好来看
- Markus Persson:Minecraft 游戏背后的奇才
- Servlet 第一课:简单Servlet Demo,写一个Hello Servlet