# encoding=UTF-8
import logging
import logging.config
logging.addLevelName(5, 'TRACE')
logging.addLevelName(30, 'WARN')
logging.addLevelName(50, 'FATAL')
logging.config.fileConfig('my.conf')
logger = logging.getLogger('root')
my.conf:
[loggers]
keys=root
[handlers]
keys=consoleHandler, fileHandler
[formatters]
keys=simpleFormatter
[logger_root]
#level=ERROR
level=DEBUG
handlers=consoleHandler, fileHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('a.log', 'a')
[formatter_simpleFormatter]
#format=%(asctime)s [%(levelname)-5s] %(name)s %(message)s
format=%(asctime)s [%(levelname)-5s] %(message)s
#datefmt= %Y-%m-%d %H:%M:%S
datefmt=
Written by ideawu
at 2012-01-04 17:10:57
新建了一个开源项目 endlessssh, 用于 SSH 代理(不是 SSH 作为代理, 而是 SSH 使用代理), 放在 Google Project Hosting. 工具有两个特点:
1. Tunneling SSH over REAL HTTP(完善中)
让 SSH 工作在 HTTP 协议上, 从而穿越防火墙.
2. 持续的会话
即使 TCP 网络连接断开(这时, SSH 会话会失效), SSH 会话仍然保持, 直到网络重连后, 会话继续.
项目地址: http://code.google.com/p/endlessssh/
补充:
谢谢评论中 Zealot 朋友的推荐.
大概看了下类似的一个 GNU 项目 httptunnel(http://www.nocrew.org/software/httptunnel.html). 这个项目所使用的交互过程更像是 HTTP 交互, 在一个 HTTP 报文中包含自己的多个报文. httptunnel 没有确认机制, 也没有会话保持机制. 不过, httptunnel 可以值得借鉴.
Written by ideawu
at 2010-06-06 15:17:22
Windows 版本的 Python, select() 函数只能接受 socket, 不接受 File Object, 所以不能 select 标准输入输出.
为此, 我开发了 win_stdio, 让 select 也能对 stdin/stdout 进行操作. 核心思想就是用 socket 作为 stdin/stdout 的代理. 结构示意如下:
stdin -> stdin_sock -> my_stdin
stdout <- stdout_sock <- my_stdout
Continue reading »
Written by ideawu
at 2010-05-30 19:21:24 | tags: IO多路复用

PyPy 项目可能会颠覆老学究和初学者的逻辑, 因为 PyPy 用 Python 语言来实现 Python 语言, 就像一只小蟒蛇吞下自己的尾巴. 也许你没见过, 但它确实存在.
你可能会疑惑, 既然已经有了 Python, 那么为什么还用 Python 来实现 Python(PyPy)? 后者到底是什么东西?
其实, 这其中的逻辑并不复杂. 比如 C 语言, C 语言的第一个编译器肯定不是用 C 语言来编写的, 但之后, C 编译器(如 GCC)就没有理由不用 C 来编写了. 所以, 用 Python 语言编写, 并用已存在的 Python 编译器(解释器, 执行环境)来做一个实现 Python 语言并没有什么奇怪.
Continue reading »
Written by ideawu
at 2010-05-09 21:30:01 | tags: PyPy
像因特网的Web系统一样, 几乎所有的大规模软件系统, 都会使用脚本语言. 在网络游戏服务器的开发中, 也会应用脚本语言. 游戏开发常用的脚本语言主要有: Python, Lua. 本文介绍在C语言中嵌入Python支持, C语言和Python语言通过API进行交互.
任何两种语言要整合, 首先要解决通信问题. C要和Python进行通信, 要进行数据结构转换, 把C的数据结构转为Python的对象, 和把Python对象转换为C数据结构.
Continue reading »
Written by ideawu
at 2010-05-07 12:00:06
如果不使用Cookie, 发送HTTP POST非常简单:
import urllib2, urllib
data = {'name' : 'www', 'password' : '123456'}
f = urllib2.urlopen(
url = 'http://www.ideawu.net/',
data = urllib.urlencode(data)
)
print f.read()
当使用Cookie时, 代码变得有些复杂:
import urllib2
cookies = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookies)
f = opener.open('http://www.ideawu.net/?act=login&name=user01')
data = '<root>Hello</root>'
request = urllib2.Request(
url = 'http://www.ideawu.net/?act=send',
headers = {'Content-Type' : 'text/xml'},
data = data)
opener.open(request)
第一次 open() 是进行登录. 服务器返回的 Cookie 被自动保存在 cookies 中, 被用在后来的请求.
第二次 open() 用 POST 方法向服务器发送了 Content-Type=text/xml 的数据. 如果你不创建一个 Request, 而是直接使用 urlopen() 方法, Python 强制把 Content-Type 改为 application/x-www-form-urlencoded.
Written by ideawu
at 2007-08-30 16:52:06
Recent Comments