• 2012-01-04

    Python logging 标准配置

    Views: 16997 | 1 Comment
    # 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= 
    
    Posted by ideawu at 2012-01-04 17:10:57
  • 2010-06-06

    endlessssh – SSH 代理工具

    Views: 32275 | 9 Comments

    新建了一个开源项目 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 可以值得借鉴.

    Posted by ideawu at 2010-06-06 15:17:22
  • 2010-05-30

    Windows Python select标准输入输出

    Views: 28348 | No Comments

    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 »

    Posted by ideawu at 2010-05-30 19:21:24 Tags:
  • 2010-05-09

    PyPy – 吞下自己尾巴的小蟒蛇

    Views: 40048 | 2 Comments

    PyPy 项目可能会颠覆老学究和初学者的逻辑, 因为 PyPy 用 Python 语言来实现 Python 语言, 就像一只小蟒蛇吞下自己的尾巴. 也许你没见过, 但它确实存在.

    你可能会疑惑, 既然已经有了 Python, 那么为什么还用 Python 来实现 Python(PyPy)? 后者到底是什么东西?

    其实, 这其中的逻辑并不复杂. 比如 C 语言, C 语言的第一个编译器肯定不是用 C 语言来编写的, 但之后, C 编译器(如 GCC)就没有理由不用 C 来编写了. 所以, 用 Python 语言编写, 并用已存在的 Python 编译器(解释器, 执行环境)来做一个实现 Python 语言并没有什么奇怪.

    Continue reading »

    Posted by ideawu at 2010-05-09 21:30:01 Tags:
  • 2010-05-07

    用脚本语言开发网游 – C整合Python

    Views: 16793 | No Comments

    像因特网的Web系统一样, 几乎所有的大规模软件系统, 都会使用脚本语言. 在网络游戏服务器的开发中, 也会应用脚本语言. 游戏开发常用的脚本语言主要有: Python, Lua. 本文介绍在C语言中嵌入Python支持, C语言和Python语言通过API进行交互.

    任何两种语言要整合, 首先要解决通信问题. C要和Python进行通信, 要进行数据结构转换, 把C的数据结构转为Python的对象, 和把Python对象转换为C数据结构.

    Continue reading »

    Posted by ideawu at 2010-05-07 12:00:06
  • 2007-08-30

    使用Python POST任意的HTTP数据以及使用Cookie

    Views: 53753 | No Comments

    如果不使用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.

    Posted by ideawu at 2007-08-30 16:52:06
|<<<123>>>| 2/3 Pages, 13 Results.