分类 "Python" 的存档.

iotop错误 No module named iotop.ui

大家共用的开发机io不正常,磁盘空间总是被莫名其妙的占满,怀疑是某些东西在不断的生成日志,,想看下具体是那些进程在使用IO,需要安装一个iotop, 使用命令sudo yum install iotop,安装成功,但是运行iotop时提示

No module named iotop.ui
To run an uninstalled copy of iotop,
launch iotop.py in the top directory

开始还以为是没安装好,卸载了重新安装,问题依然存在。
后来仔细分析了提示信息:No mudule name xxx 应该是python的提示信息,由于服务器上默认的python版本2.4太低,我们自己安装了2.6的版本,并且把/usr/bin/python指向了2.6版本的python,而使用yum安装的库在python2.4的路径下,这就导致直接运行iotop时出现模块不存在的信息,之前yum也有同样的问题。
解决方法也很简单,只需要把安装的iotop -> /usr/bin/iotop第一行的python运行环境由#!/usr/bin/python改为#!/usr/bin/python2.4即可。

GoAgent翻墙 — MultiplexConnection Cannot hosts错误?

今天在使用GoAgent时遇到了MultiplexConnection Cannot hosts错误,以前一直都没有问题的,下午突然开始犯病了。问了下同事,也不能用。
解决办法自然也是有的。
找到Goagent/local 目录下的proxy.ini 文件,打开,编辑[gae]选项卡下的profile = google_cn 选项,改为profile = google_hk。然后保存关闭。再重新打开GoAgent就可以啦。

No module named zope.interface -windows cygwin -install zope

今天安装了Twisted,使用的时候了报ImportError(ImportError: No module named zope.interface):

from zope.interface import implements

细心的话,在安装Twisted的时候应该能发现,对安装是有环境需求的:

This method is only necessary if you are trying to install Twisted from e.g. the Subversion repository, and you don’t want to acquire all the tools necessary to do the Official build.

Install either Python 2.4 or Python 2.5
Install ZopeInterface 3.3.0 or later for Python

需要安装ZopeInterface。
但是如何安装这个扩展呢,在这里可以找到 zope.interface,我选择的是安装zope.interface 3.8.0,然后点击Downloads我们可以看到一堆egg的文件,以及一个Source的文件,我们选择source的文件下载,放到cygwin环境下的某个目录里下,比如说/usr/src/.
然后,使用cygwin,依次输入以下命令,即可安装完成。

cd /usr/src
cd zope.interface.3.8
python setup.py install build --compiler=mingw32
python setup.py install

python def和lambda的相同与不同

原文:http://www.cnpythoner.com/post/140.html

python def和python lambda 这2个有相似点也有不同点,今天给大家分享下自己的心得吧。
先说说2个的相似点: 这两个很重要的相似点就是都可以定义一些固定的方法或者是流程,供给程序来调用,比如我们要定义一个变量加2的方法。
首先看python def吧。

def info(x):
    return x + 2

a = info(1)
print a

再看下python lambda

f = lambda x : x+2
a = f(1) 
print a 

上面2种方式输出的结果都是3,如果你要完成一些固定的流程的话,上面两种你都可以任意选择。
Read more…

python标准库和第3方库的介绍

下面是python标准库和第3方库的介绍:

 Tkinter———— Python默认的图形界面接口。
  Tkinter是一个和Tk接口的模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组。Tcl/Tk是由John Ousterhout发展的书写和图形设备。Tcl(工具命令语言)是个宏语言,用于简化shell下复杂程序的开发,Tk工具包是和Tcl一起开发的,目的是为了简化用户接口的设计过程。Tk工具包由许多不同的小部件,如一个按钮、一个滚动条等。通过Tk提供的这些小部件,我们就可快速地进行GUI开发。Perl、Scheme等语言也利用Tk库进行GUI开发。Tkinter是跨平台,在各种平台下都能使用。
  Python Imaging Library(PIL)————它提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是用户进行图象处理的强有力工具。
  Pmw(Python megawidgets)它是超级GUI组件集————一个利用Tkinter模块构建的高级GUI组件,每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。
  PyXML———— 用Python解析和处理XML文档的工具包,包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容:
  xmlproc: 一个符合规范的XML解析器。
  Expat: 一个快速的,非验证的XML解析器。 还有其他
  和他同级别的还有 PyHtml PySGML
  PyGame———— 用于多媒体开发和游戏软件开发的模块。
  PyOpenGL———— 模块封装了“OpenGL应用程序编程接口”,通过该模块python程序员可在程序中集成2D和3D的图形。
Read more…

零宽断言,负向零宽断言

零宽断言是正则表达式中的一种方法

正则表达式在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

Read more…

我写的第一个shell脚本

#!/bin/bash
fdate=20111001
while [ $fdate != "20111021" ]
do
        #echo $fdate;
        perl -e "print $fdate;"#使用perl脚本处理文件
        fdate=$(($fdate+1));
done

这是我第一次写shell脚本,虽然很简单哈,,不过确实是我为了工作需求而写出来的一个脚本,可以顺序执行20条perl命令,去处理20天的数据,每天的数据处理都得可能要花上一个小时,所以如果人为的去一条一条处理的话,太浪费时间了,写个perl、php或者Python脚本倒是也很简单,不过最近正好在看bash的书,正好当作实践一下了。
Read more…

linux中select()函数分析,同样适用于Python/Perl中的socket多线程select

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高)方式工作的程序,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。下面详细介绍一下!

Select的函数格式(我所说的是Unix系统下的伯克利socket编程,和windows下的有区别,一会儿说明):

int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);

先说明两个结构体:

第一,struct fd_set可以理解为一个集合,这个集合中存放的是文件描述符(file descriptor),即文件句柄,这可以是我们所说的普通意义的文件,当然Unix下任何设备、管道、FIFO等都是文件形式,全部包括在内,所以毫无疑问一个socket就是一个文件,socket句柄就是一个文件描述符。fd_set集合可以通过一些宏由人为来操作,比如清空集合FD_ZERO(fd_set *),将一个给定的文件描述符加入集合之中FD_SET(int ,fd_set *),将一个给定的文件描述符从集合中删除FD_CLR(int ,fd_set*),检查集合中指定的文件描述符是否可以读写FD_ISSET(int ,fd_set* )。一会儿举例说明。

第二,struct timeval是一个大家常用的结构,用来代表时间值,有两个成员,一个是秒数,另一个是毫秒数。
Read more…

如何在Python中使用 Linux epoll 翻译自《How To Use Linux epoll with Python》

原文地址: http://scotdoyle.com/python-epoll-howto.html

文章里面的代码可以 点击这里下载.

介绍

从2.6版本开始, python 提供了使用linux epoll 的功能. 这篇文章通过3个例子来大致介绍如何使用它. 欢迎提问和反馈.

阻塞式socket通讯

第一个例子是一个简单的python3.0版本的服务器代码, 监听8080端口的http请求, 打印结果到命令行, 回应http response给客户端.

  • 行 9: 建立服务器的socket
  • 行 10: 允许11行的bind()操作, 即使其他程序也在监听同样的端口. 不然的话, 这个程序只能在其他程序停止使用这个端口之后的1到2分钟后才能执行.
  • 行 11: 绑定socket到这台机器上所有IPv4地址上的8080端口.
  • 行 12: 告诉服务器开始响应从客户端过来的连接请求.
  • 行 14: 程序会一直停在这里, 直到建立了一个连接. 这个时候, 服务器socket会建立一个新的socket, 用来和客户端通讯. 这个新的socket是accept()的返回值, address对象标示了客户端的IP地址和端口.
  • 行 15-17: 接收数据, 直到一个完整的http请求被接收完毕. 这是一个简单的http服务器实现.
  • 行 18: 为了方便验证, 打印客户端过来的请求到命令行.
  • 行 19: 发送回应.
  • 行 20-22: 关闭连接, 以及服务器的监听socket.

Read more…