Linux 下 Python 实现按任意键退出

Tue 20 August 2013

初学Python时在总想实现一个按任意键继续/退出的程序(受.bat毒害), 奈何一直写不出来, 最近学习Unix C时发现可以通过termios.h库来实现, 尝试一下发现Python也有这个库, 所以终于写出一个这样的程序. 下面是代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import sys
import termios


def press_any_key_exit(msg):
    # 获取标准输入的描述符
    fd = sys.stdin.fileno()

    # 获取标准输入(终端)的设置
    old_ttyinfo = termios.tcgetattr(fd)

    # 配置终端
    new_ttyinfo = old_ttyinfo[:]

    # 使用非规范模式(索引3是c_lflag 也就是本地模式)
    new_ttyinfo[3] &= ~termios.ICANON …

Category: Python Tagged: Python Linux 任意键 退出

comments

Read More

发布一个基于Tornado的高效异步的HTTP客户端库

Thu 01 August 2013

前面的博文提到过使用tornado进行网络异步编程, 也使用tornado实现了一个高效的WebQQ机器人, 由于tornado内置的AsyncHTTPClient功能过于单一, 所以自己写了一个基于Tornado的HTTP客户端库, 鉴于自己多处使用了这个库, 所以从项目中提取出来, 写成一个单独库 tornadohttpclient

TornadoHTTPClient 是一个基于Tornado的高效的异步HTTP客户端库, 支持Cookie和代理, 目前仅在Python2.7平台上测试过, 不支持Python3

听取了仙子君的意见, 直接对tornado.curl_httpclient.CurlAsyncHTTPClient进行封装

安装

首先从git clone 下代码

git clone https://github.com/coldnight/tornadohttpclient.git

然后安装它

cd tornadohttpclient
python setup.py install

教程

GET

TornadoHTTPClient的get方法可以发起一个get请求

from …

Category: Python Tagged: tornado http client module Python 高效

comments

Read More

Pual 更新支持SimSimi可以进行互动

Thu 30 May 2013

Pual 跑了许久, 通过一段时间的修改现在Pual主要支持以下功能:

  • 英汉互译
  • 为每个用户分配一个session的含有上下文的Python shell
  • 贴代码

总而言之就是一个被动型的辅助机器人, 群里有同学建议AI功能, 但是我水平不够没办法设计和实现AI部分, 所以想调用SimSimi实现AI, 发现官方Key才免费7天, 我这等穷苦人如何是买不起key的, google发现有一个非官方API可以调用, 但是被封了.但咱不是个容易放弃的人, 经过一番折腾非官方API可以正常调用, 所以Pual也有AI功能了, 只要在有Pual的群里发送Pual打头的消息 就可以和Pual互动

项目地址

Pual帐号是:1685359365, 大家可以先加好友回答验证问题:cold, 然后将它拉入群内进行调戏

Category: Python Tagged: Pual Python bot SimSimi

comments

Read More

说说Python装饰器

Mon 20 May 2013

装饰器对与Python新手以至于熟悉Python的人都是一个难理解, 难写的东西. 那么今天就分享一下我对Python 装饰器的理解

所谓装饰器仅仅是一种语法糖, 可作用的对象可以是函数也可以是类, 装饰器本身是一个函数, 其主要工作方式就是将被装饰的类或者函数当作参数传递给装饰器函数, 比如定义如下装饰器

import time

def run_time(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        r = func(*args, **kwargs)
        print time.time() - start
        return r
    return wrapper

我们用这个装饰器装饰一个test函数

@run_time
def test():
    print "just a test"

前面说过其实装饰器就是一个语法糖, 就是将被装饰的函数作为参数传递给装饰器函数, 所以上面可以展开为

test = run_time(test)

装饰器将在解释器运行一开始就被加载 …

Category: Python Tagged: Python 装饰器

comments

Read More

clubot更新: 使用SQLAlchemy重写数据库部分和改用Tornado MainLoop

Fri 26 April 2013

clubot在我的vps上跑了有一段时间了, 最近接触了SQLAlchemy 然后反观clubot的数据库代码部分, 感觉代码又遭有乱实在看不过眼, 所以就使用SQLAlchemy重写了数据库模块, 并将epoll的MainLoop改成仙子君所写的TornadoMainLoop

更新内容

  1. 数据库使用SQLAlchemy重写
  2. MainLoop改用TornadoMainLoop
  3. 改变代码结构, 清理部分代码
  4. history命令改为old, 并支持时间查询
  5. 废弃一些不常用的命令
  6. 改变数据库表结构
  7. 废弃channel功能, cd命令仅支持切换聊天和安静模式
  8. 删除一些不用的配置

如何升级

数据库表结构做了更改, 所以为了兼容之前的数据库本次表名前加上clubot_前缀, 并配以update.py脚本用以支持将旧的数据导入.

新的依赖

本次更新添加了依赖 …

Category: Python Tagged: clubot pyxmpp2 gtalk xmpp 更新 重写 SQLAlchemy tornado

comments

Read More

SQLAlchemy MySQL数据库乱码解决

Fri 26 April 2013

今天对clubot进行了升级, 但是导入数据后中文乱码, 一开是找资料说是在创建引擎的时候添加编码信息:

engine = create_engine("mysql://root:@localhost:3306/clubot?charset=utf8")

但是这并不行, 然后查看表信息:

> show create table clubot_members;
clubot_members | CREATE TABLE `clubot_members` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(100) DEFAULT NULL,
  `nick` varchar(50) DEFAULT NULL,
  `last_say` timestamp NULL DEFAULT NULL,
  `last_change` timestamp NULL DEFAULT …

Category: Python Tagged: sqlalchemy MySQL 数据库 乱码 utf8

comments

Read More

借用Tornado实现高效的WebQQ机器人

Tue 23 April 2013

之前有写过一篇文章介绍使用Pyxmpp2桥接QQ和xmpp的文章(这里).后来我打算将WebQQ单独出来运行, 一开始直接拷贝了pyxmpp2的mainloop, 但是跑起来问题多多, 所以我又研究了利用Tornado进行网络编程(这里), 所以我放弃了Pyxmpp2的mainloop,使用Tornado进行重写

首先放出项目代码

引子

WebQQ协议是一套基于HTTP的QQ协议, 而用Pythonurllib2库进行请求太慢, 因为HTTP本身就使用socket请求, 所以改用多路复用I/O模型, 而Tornado简单高效, 看过代码后可以轻松上手.平台兼容性很好, 所以选择Tornado作为网络框架.

原理

首先实现了一个 HTTPStream类, 其主要接口是add_request方法, 它接受一个必选参数:request …

Category: Python Tagged: tornado 高效 webqq 并发 协议

comments

Read More

使用Pelican打造静态博客

Thu 18 April 2013

前面有文章介绍本站采用了Python编写的Pelican静态生成博客系统, 之所以没有使用当前很火的Jekyll, 是因为它是Ruby编写, 而我又对Ruby没有啥兴趣, 所以还是选择了使用了我熟悉的Python编写的这套系统, 我用了一段时间,打算将使用经验分享出来

介绍

Pelican是一套开源的使用Python编写的博客静态生成, 可以添加文章和和创建页面, 可以使用MarkDown reStructuredTextAsiiDoc 的格式来抒写, 同时使用 Disqus评论系统, 支持 RSSAtom输出, 插件, 主题, 代码高亮等功能, 采用Jajin2模板引擎, 可以很容易的更改模板

安装

可以从github克隆最新的代码安装, 并且建议在virtualenv下使用:

建立 virtualenv …

Category: Python Tagged: Python 静态 生成 Pelican 博客

comments

Read More

使用Tornado进行网络异步编程

Mon 15 April 2013

Tornado

Tornado 是一款非阻塞可扩展的使用Python编写的web服务器和Python Web框架, 可以使用Tornado编写Web程序并不依赖任何web服务器直接提供高效的web服务.所以Tornado不仅仅是一个web框架而且还是一款可以用于生产环境的高效的web服务器

Torando 在Linux和FreeBSD上使用高效的异步I/O模型 epollkqueue来实现高效的web服务器, 所以 tornado在Linux上和FreeBSD系列性能可以达到最高

接口

当然我们可以不仅仅把Tornado看作是一个web框架和web服务器, 我们可以利用Tornado提供的接口进行高效的网络异步编程,

tornado.ioloop.IOLoop 提供了三个接口可以用于网络编程:

add_handler

def add_handler(self, fd, handler, events):
    self._handlers[fd] = stack_context.wrap(handler)
    self._impl.register(fd, events | self.ERROR …

Category: Python Tagged: Python tornado 网络 异步 编程

comments

Read More

使用WebQQ协议桥接XMPP和QQ群

Thu 14 March 2013

介绍

无意中看见有人利用WebQQ协议开发出Linux下Pidgin的插件, 让Pidgin来收发QQ消息, 突然想将clubot和QQ群来桥接起来一定非常有趣,这样就可以通过gtalk收发QQ来的消息, 不过前期还是想将clubot和QQ群桥接起来.

实施

想到了就开始弄呗, 于是上网找了写有关WebQQ的协议, 首先写出了一个根据urllib2的版本并使用线程同时跑WebQQ和xmpp, 源码可以查看: thread_version

优化

上面的线程版效率不是很高, 由于都是网络请求, 所以想加入可以加入到pyxmpp2的mainloop中, 使用复用I/O模型来提高效率, 首先需要解决的是将http请求通过urllib2改为socket, 于是写出HTTPSock类来实现这个需求:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
#   Author  :   Wood.D
#   E-mail  :   wh_linux@126.com
#   Date    :   13/03/04 09:58:26
#   Desc    :   Http Socket 实现 …

Category: Python Tagged: WebQQ xmpp python XMPP pyxmpp2

comments

Read More
Page 2 of 5

« Prev Next »

Fork me on GitHub