随笔分类 - Python

摘要: 使用gdb调试Python进程有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump。例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到哪行Python代码呢?这时就需要祭出gdb了。主要是三步:1)确保你的gdb版本>=72)安装pyt...阅读全文
posted @ 2014-06-24 15:58 dkcndk 阅读(12233) | 评论 (1) 编辑
摘要: command="/usr/local/sbin/xxx_cmd"os.popen(command)xxx_cmd是自己编译的二进制文件,如果不加上全路径/usr/local/sbin/的话在你的python 进程是通过service xxx start方式启动时os.popen(command)返回内容为空的,函数执行命令也无异常,很奇怪,暂不能解释,记录在案。阅读全文
posted @ 2013-07-13 18:13 dkcndk 阅读(1802) | 评论 (0) 编辑
摘要: 这篇文章主要是对我收集的一些文章的摘要。因为已经有很多比我有才华的人写出了大量关于如何成为优秀Python程序员的好文章。我的总结主要集中在四个基本题目上:函数式编程,性能,测试,编码规范。如果一个程序员能将这四个方面的内容知识都吸收消化,那他/她不管怎样都会有巨大的收获。函数式编程命令式的编程风格已经成为事实上的标准。命令式编程的程序是由一些描述状态转变的语句组成。虽然有时候这种编程方式十分的有效,但有时也不尽如此(比如复杂性) —— 而且,相对于声明式编程方式,它可能会显得不是很直观。如果你不明白我究竟是在说什么,这很正常。这里有一些文章能让你脑袋开窍。但你要注意,这些文章有点像《骇客帝国阅读全文
posted @ 2013-06-14 17:01 dkcndk 阅读(4645) | 评论 (1) 编辑
摘要: Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。 改进算法,选择合适的数据结构 一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进。在算法的时间复杂度排序上依次是:O(1) -> O(lg n) -> O(n lg n) -> O(n^2) -> O(n^3) -> O(n^k) -> O(k^n) ->阅读全文
posted @ 2013-06-14 16:48 dkcndk 阅读(934) | 评论 (0) 编辑
摘要: Pexpect 是一个用来启动子程序并对其进行自动控制的纯 Python 模块。 Pexpect 可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。继第一部分《探索 Pexpect,第 1 部分:剖析 Pexpect 》介绍了 Pexpect 的基础和如何使用后,本文将结合具体实例入手,详细介绍 Pexpect 的用法和在实际应用中的注意点。概述通过本系列第一部分《探索 Pexpect,第 1 部分:剖析 Pexpect 》(请参阅参考资料)的介绍,相信大家已经对 Pexpect 的用法已经有了比较全面的了解,知道 Pexpect 是个纯 Python 语言实阅读全文
posted @ 2013-03-20 11:03 dkcndk 阅读(13560) | 评论 (0) 编辑
摘要: 由于Python的datetime和time中的_strptime方法不支持多线程,运行时会报错:import datetimeimport threadimport timedef f(): datetime.datetime.strptime("20100101","%Y%m%d")for _ in xrange(3): thread.start_new_thread(f, ())time.sleep(3)Unhandled exception in thread started by <function f at 0x2b52c24e66e0阅读全文
posted @ 2012-12-31 13:54 dkcndk 阅读(942) | 评论 (0) 编辑
摘要: 今天抽空学习python,对python的元组、列表、字典,参考地址:http://yangsq.iteye.com/blog/128508感觉python的函数用法挺灵活的,和c、php的用法不太一样,和js倒是挺像的。在照着操作时,我发现一个很神奇的现象:>>> t = (1, 3, 'b')>>> q = t + ((3, 'abc'))>>> q(1, 3, 'b', 3, 'abc')这里我预料的应该是(1, 3, 'b', (3, 'abc&阅读全文
posted @ 2012-10-20 16:17 dkcndk 阅读(4358) | 评论 (0) 编辑
摘要: 首先要说的是python中的除法运算,在python 2.5版本中存在两种除法运算,即所谓的true除法和floor除法。当使用x/y形式进行除法运算时,如果x和y都是整形,那么运算的会对结果进行截取,取运算的整数部分,比如2/3的运算结果是0;如果x和y中有一个是浮点数,那么会进行所谓的true除法,比如2.0/3的结果是 0.66666666666666663。另外一种除法是采用x//y的形式,那么这里采用的是所谓floor除法,即得到不大于结果的最大整数值,这个运算时与操作数无关的。比如2//3的结果是0,-2//3的结果是-1,-2.0//3的结果是-1.0。 在未来的python 3阅读全文
posted @ 2012-10-11 19:38 dkcndk 阅读(67106) | 评论 (0) 编辑
摘要: 加密算法: 对称加密算法: DES、IDEA、RC2、RC4、AES、Skipjack …… 非对称加密算法: RSA、DSA、DiffieHellman、PKCS、PGP …… 单向的HASH算法属于报文摘要算法,虽然有些也出自OpenSSL库。 命令操作: 1、生成普通私钥:[weigw@TEST src]$ openssl genrsa -out privatekey.key 1024Generating RSA private key, 1024 bit long modulus ....++++++ .......++++++ e is 65537 (0x10001) ...阅读全文
posted @ 2012-09-13 11:30 dkcndk 阅读(1973) | 评论 (0) 编辑
摘要: Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime。time模块我在之前的文章已经有所介绍,它提供的接口与C标准库time.h基本一致。相比于time模块,datetime模块的接口则更直观、更容易调用。今天就来讲讲datetime模块。 datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最小、最大年份。其中,MINYEAR = 1,MAXYEAR = 9999。(对于偶等玩家,这个范围已经足够用矣~~) datetime模块定义了下面这几个类:datetime.阅读全文
posted @ 2012-08-16 13:45 dkcndk 阅读(592) | 评论 (0) 编辑
摘要: 获取当前时间,并通过字符串输出。格式为:%Y-%m-%d %H:%M:%S'datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S' )获取当前时间,但只保留日期datetime.datetime.now().date()将字符串转换为datetime类型输入字符串格式为:'%Y-%m-%d'datetime.datetime.strptime(time,'%Y-%m-%d')print 'start at:',datetime.datetime.now().strftime阅读全文
posted @ 2012-07-13 19:11 dkcndk 阅读(352) | 评论 (0) 编辑
摘要: 模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中。此类中的大部分函数都与对文件的操作方法类似。例:1#coding=gbk23importStringIO,cStringIO,sys45s=StringIO.StringIO("JGoodisahandsomeboy")6s.write("JGoodisahandsomeboy\r\n")7s.write('okkkk中国')8s.seek(0)9prints.read()1011#最后4个字节12s.seek(-4,2)13prints.read()1415#---阅读全文
posted @ 2012-06-21 11:24 dkcndk 阅读(1999) | 评论 (0) 编辑
摘要: 简介: Zookeeper (http://zookeeper.apache.org/)分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。具体简介可以参照这篇文章。zkpython的安装:python中有一个zkpython的包,是基于zookeeper的c-client开发的,所以安装的时候需要先安装zookeeper的c客户端。安装步骤如下:12345678910111213# 首先下载zookeeperwget http://labs.renren.co.阅读全文
posted @ 2012-04-05 15:24 dkcndk 阅读(2396) | 评论 (0) 编辑
摘要: Protobuf语言指南l定义一个消息(message)类型l标量值类型lOptional 的字段及默认值l枚举l使用其他消息类型l嵌套类型l更新一个消息类型l扩展l包(package)l定义服务(service)l选项(option)l生成访问类本指南描述了怎样使用protocolbuffer语言来构造你的protocol buffer数据,包括.proto文件语法以及怎样生成.proto文件的数据访问类。本文是一个参考指南——如果要查看如何使用本文中描述的多个特性的循序渐进的例子,请在http://code.google.com/intl/zh-CN/apis/protocolbuffer阅读全文
posted @ 2012-03-27 09:32 dkcndk 阅读(102505) | 评论 (6) 编辑
摘要: 当前很多大型的web系统为了减轻数据库服务器负载,会采用memchached作为缓存系统以提高响应速度。目录:memchached简介hash取模一致性hash虚拟节点源码解析参考资料1. memchached简介memcached是一个开源的高性能分布式内存对象缓存系统。其实思想还是比较简单的,实现包括server端(memcached开源项目一般只单指server端)和client端两部分:server端本质是一个in-memory key-value store,通过在内存中维护一个大的hashmap用来存储小块的任意数据,对外通过统一的简单接口(memcached protocol)来阅读全文
posted @ 2012-03-15 16:53 dkcndk 阅读(1430) | 评论 (1) 编辑
摘要: Python 中的bisect用于操作排序的数组,比如你可以在向一个数组插入数据的同时进行排序。下面的代码演示了如何进行操作:import bisectimport randomrandom.seed(1)print('New pos contents')print('-----------------')l=[]for i in range(1,15): r=random.randint(1,100) position=bisect.bisect(l,r) bisect.insort(l,r) print '%3d %3d'%(r,positi阅读全文
posted @ 2012-03-15 11:46 dkcndk 阅读(3550) | 评论 (0) 编辑
摘要: python enumerate 用法 | 在for循环中得到计数参数为可遍历的变量,如 字符串,列表等; 返回值为enumerate类:import strings = string.ascii_lowercasee = enumerate(s)print sprint list(e)输出为:abcdefghij[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'阅读全文
posted @ 2012-03-15 11:35 dkcndk 阅读(362) | 评论 (0) 编辑
摘要: http://www.cnblogs.com/Alexander-Lee/archive/2010/05/28/1745895.html阅读全文
posted @ 2012-02-10 14:40 dkcndk 阅读(1453) | 评论 (0) 编辑
摘要: ipython:1.安装easy_install工具wgethttp://peak.telecommunity.com/dist/ez_setup.pypython ez_setup.py2.安装ipythoneasy_install ipythonbpython: http://bpython-interpreter.org/downloads/1.安装easy_install工具wgethttp://peak.telecommunity.com/dist/ez_setup.pypython ez_setup.py2.安装bpythoneasy_install bpython阅读全文
posted @ 2012-02-03 16:24 dkcndk 阅读(1082) | 评论 (0) 编辑
摘要: dict1={1:[1,11,111],2:[2,22,222]}dict2={3:[3,33,333],4:[4,44,444]}合并两个字典得到类似{1:[1,11,111],2:[2,22,222],3:[3,33,333],4:[4,44,444]}方法1:dictMerged1=dict(dict1.items()+dict2.items())方法2:dictMerged2=dict(dict1, **dict2)方法2等同于:dictMerged=dict1.copy()dictMerged.update(dict2)或者dictMerged=dict(dict1)dictMerg阅读全文
posted @ 2012-02-02 17:59 dkcndk 阅读(81489) | 评论 (0) 编辑
摘要: 从网页中抓到的字符串s = '&lt;abc&gt;'用Python可以这样处理:import HTMLParser html_parser = HTMLParser.HTMLParser() s = html_parser.unescape(s) #这样就得到了s = '<abc>'阅读全文
posted @ 2011-12-27 17:37 dkcndk 阅读(363) | 评论 (0) 编辑
摘要: 在xmlrpclib中,需要传送二进制的数据,因此使用了Binary Objects来打包,写了如下两个函数:def encodebindata(data): out = StringIO.StringIO() bin = xmlrpclib.Binary() bin.data = data bin.encode(out) data2 = out.getvalue() return data2def decodebindata(data): bin = xmlrpclib.Binary() data1 = bin.decode(data) return bin.data在调用decodebin阅读全文
posted @ 2011-12-09 16:46 dkcndk 阅读(729) | 评论 (0) 编辑
摘要: python-ldap访问AD域的的错误一般会如下格式:{'info': '80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece', 'desc': 'Invalid credentials'}其中红字部分的意思如下(这些错误码跟语言无关):525 - 用户没有找到52e - 证书不正确530 - not permitted to logon at this time532 - 密码期满533 - 帐户不可用70阅读全文
posted @ 2011-11-03 14:17 dkcndk 阅读(592) | 评论 (0) 编辑
摘要: 如果你在执行python相关的程序时,出现如下的错误.....python2.5/subprocess.py", line 1079, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory 那你就一定得检查用subprocess执行的命令是否存在或是否在你的$PATH路径下,如果不在,请一定要加上,不然会一直报这样的错误。小问题折腾人!!!阅读全文
posted @ 2011-10-25 17:48 dkcndk 阅读(1370) | 评论 (0) 编辑
摘要: 资料: Python官方Doc:《20.15. uuid — UUID objects according to RFC 4122》 UUID的算法介绍:《A Universally Unique IDentifier (UUID) URN Namespace》概述: UUID是128位的全局唯一标识符,通常由32字节的字符串表示。 它可以保证时间和空间的唯一性,也称为GUID,全称为: UUID —— Universally Unique IDentifier Python 中叫 UUID GUID —— Glob...阅读全文
posted @ 2011-10-10 10:37 dkcndk 阅读(62426) | 评论 (1) 编辑
摘要: yum install MySQL-p*阅读全文
posted @ 2011-09-27 14:20 dkcndk 阅读(234) | 评论 (0) 编辑
摘要: Python has complete support for sockets. Some of the APIs though have a different signature than the POSIX equivalents. It is therefore possible to write multicast servers and clients in Python. Multicasting is the ability to send data to select set of hosts. Broadcasting in a network is to send dat阅读全文
posted @ 2011-09-22 16:14 dkcndk 阅读(874) | 评论 (0) 编辑
摘要: 毫无疑问, 你需要配置文件。据说配置文件能让你的系统变得可定制。让系统变得可定制, 有三大思潮, 这决定了三种配置文件的格式:1. 图形界面配置工具。 微机和 Windows 开始流行之后, 我们的用户再也不是黑客了, 或许你的用户永远不会打开你的配置文件, 你需要给他一个图形工具, 并且帮他换尿布。 在人类永远不会阅读配置文件的情况下, 让系统变得更简洁的方法就是使用 机器最容易理解的格式来存储配置, 通常这是一个二进制文件。 Pickle 是 Python 中的典型选项。 几十年后, 有人开始以为使用机器和人都能理解 (或者都不能理解) 的格式是一个好主意, 这样就...阅读全文
posted @ 2011-09-16 16:18 dkcndk 阅读(4868) | 评论 (0) 编辑
摘要: http://pypi.python.org/pypi/mock阅读全文
posted @ 2011-09-02 18:18 dkcndk 阅读(276) | 评论 (0) 编辑
摘要: 在zope实例所采用的python的路径中,找到site-packages目录,在此目录中建立一个sitecustomize.py文件,设置相应的权限。文件的内容如下:import syssys.setdefaultencoding("utf-8")重启zope实例,这样将解决很多unicodedecodeerror错误。=========================================#for python2.7 on ubuntu/etc/python2.7/sitecustomize.py#for python2.6 on centOS/usr/loc阅读全文
posted @ 2011-09-01 14:24 dkcndk 阅读(3855) | 评论 (0) 编辑
摘要: 不知道什么原因,CentOS 5.4 了,默认的Python的版本还是2.4的. 但是Python在CentOS里面的又非常的重要,可是 2.4版本的Python有很多的模块没有,最新的Python 2.6版本增加了很多高级特征.所以,很有必要进行升级.升级的方法很多种,一种就是直接RPM了,还有一种就是 源代码的方式方式,源代码的确不错,可是麻烦啊,还要编译,相当的麻烦. 我在网上找了下如何在 CentOS 5.4 下面创建 Python 2.6 的RPM包的方法,特写上来1. 在官网下载 源代码 cd /usr/src/rehat/SOURCES wgethttp://www.pytho.阅读全文
posted @ 2011-08-31 14:19 dkcndk 阅读(1627) | 评论 (1) 编辑
摘要: 1.简单的将日志打印到屏幕importlogginglogging.debug('This is debug message')logging.info('This is info message')logging.warning('This is warning message')屏幕上打印:WARNING:root:This is warning message默认情况下,logging将日志打印到屏幕,日志级别为WARNING;日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO >阅读全文
posted @ 2011-08-26 18:27 dkcndk 阅读(193168) | 评论 (14) 编辑
摘要: 抽象基类有些面向对象的语言,如JAVA,支持接口,可以声明一个支持给定的一些方法方法,或者支持给定存取协议的类。抽象基类(或者ABCs)是Python里一个相同的特性。抽象基类由abc模块构成,包含了一个叫做ABCMeta的metaclass。这个metaclass由内置的isinstance()和issubclass()特别处理,并包含一批会被Python开发人员广泛用到的基础抽象基类。将来的Python版本可能会加入更多的抽象基类。比如说有某个特定类你想知道它是否支持dictionary类型的存取。然而dictionary类型是个模糊的表述。它可能意味着可以通过obj[1]进行存取。那是否阅读全文
posted @ 2011-08-03 10:49 dkcndk 阅读(33567) | 评论 (0) 编辑
摘要: python模拟java.util.Properties 解析properties文件的工具类类工具阅读全文
posted @ 2011-07-28 15:52 dkcndk 阅读(1017) | 评论 (0) 编辑
摘要: Python 的 SOAP 实现SOAPy:Python 的一个 SOAP/XML 模式库。另请参阅 Source Forge SOAPy 项目页面。 SOAP.py,Python 项目的一个 Web 服务项目。另请参阅 开发冻结通知。 PySOAP,旨在作为 SOAP v1.1 标准的 Python 实现。 soaplib由 Secret Labs 管理。 请参阅 Orchard Sourceforge 主页。阅读全文
posted @ 2011-07-22 17:43 dkcndk 阅读(2135) | 评论 (0) 编辑
摘要: NameHomepageDescriptioncgiRun as CGI scriptflupflupRun as Fast CGI processgaegaeHelper for Google App Engine deploymentswsgirefwsgirefSingle-threaded default servercherrypycherrypyMulti-threaded and very stablepastepasteMulti-threaded, stable, tried and testedrocketrocketMulti-threadedgunicorngunico阅读全文
posted @ 2011-07-20 17:05 dkcndk 阅读(1246) | 评论 (0) 编辑
摘要: coverage.py,这个工具比较简单,我用easy_install安装的($easy_installcoverage),非常顺利。由于python不需要编译链接,所以这个工具使用非常简单。coverage run [options] your_cmd [cmd options]。假如原来的运行的命令是:fact_compare.py -d result需要收集代码覆盖信息的话只需要这样运行coverage run --branch fact_compare.py -d result运行完了以后会在当前目录下生成一个.coverage文件,保存了代码覆盖信息,可以用简单的coverage r阅读全文
posted @ 2011-07-11 10:49 dkcndk 阅读(1484) | 评论 (0) 编辑
摘要: 1.help--->SoftWare Updates--->Find and Install...。2.选择 Search for new features for install,然后单击 Next。在显示的窗口中,选择 new remote site。此时,会弹出一个对话框,要求输入新的更新站点的名称和链接。这里,名称项输入 PyDev,当然,您也可以输入其他的名称;链接里输入http://www.fabioz.com/pydev/updates,也可以填http://pydev.sourceforge.net/updates。然后,单击 Ok。这样,一个新的 PyDev 的站阅读全文
posted @ 2011-07-11 10:48 dkcndk 阅读(2046) | 评论 (0) 编辑
摘要: python中的单元测试pyUnit在Python中进行单元测试时需要用到PyUnit模块,Python 2.1及其以后的版本都将PyUnit作为一个标准模块,但如果你使用的是较老版本的Python,那就要自已动手安装了。在PyUnit的网站(http://sourceforge.net/projects/pyunit)上可以下载到PyUnit最新的源码包,此处使用的是pyunit-1.4.1.tar.gz。PyUnit跟Junit很相似,甚至连一些基本的函数名都一样。例如测试类必须是TestCase的子类,且初始函数为setUp(self), 清理函数tearDown(self)。widge阅读全文
posted @ 2011-07-10 22:38 dkcndk 阅读(2498) | 评论 (0) 编辑
摘要: 自动加载主要用于开发和测试阶段,要不每次修改,都重启tornado服务,太囧。tornado源码有autoreload模块。参考:autoreload.py可以看到一个私有方法:_reload_on_update,其实只要引入这个模块,调用它即可。示例如下:import tornado.autoreloaddef main(): server = tornado.httpserver.HTTPServer(application) server.listen(8888) instance = tornado.ioloop.IOLoop.instance() tornado.autoreload阅读全文
posted @ 2011-07-06 15:21 dkcndk 阅读(481) | 评论 (0) 编辑
摘要: # vim /etc/resolv.conf# yum install gcc-c++# tar jxvf Python-2.6.5.tar.bz2# cd Python-2.6.5# ./configure# make && make install# python -V# /usr/local/bin/python2.6 -V# mv /usr/bin/python /usr/bin/python.bak# ln -s /usr/local/bin/python2.6 /usr/bin/python# python -V# tar xvzf tornado-1.2.1.ta阅读全文
posted @ 2011-07-05 16:00 dkcndk 阅读(1101) | 评论 (0) 编辑
摘要: 【搜狐IT消息】北京时间6月22日消息,据国外媒体报道,本•达奈尔(Ben Darnell)刚刚在谷歌的Tornado群组宣布,开源网络服务框架Tornado推出2.0版。 Tornado是用Pyhton语言开发的实时网络服务框架,它支持上万次的不间断连接,因此也支持以长轮询(long-polling)方式发布实时数据。根据达奈尔的说法,此次Tornado更新主要包括模板输出默认开启转义、支持Python 3.2、AsyncHTTPClient的默认实现现在是simple_httpclient等。 目前还不清楚Facebook在Tornado的此次更新中扮演了什么角色。2009年,Facebo阅读全文
posted @ 2011-07-04 10:43 dkcndk 阅读(1041) | 评论 (0) 编辑
摘要: #!/usr/bin/pythonimport tracebacktry:1/0#except Exception,e:#print traceback.format_exc() except Exception as e:print e#!/usr/bin/pythonimport tracebacktry:1/0#except Exception,e:#print traceback.format_exc() except Exception , e:print e Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是阅读全文
posted @ 2011-06-24 15:37 dkcndk 阅读(195338) | 评论 (4) 编辑
摘要: 这个struct主要是用来处理C结构数据的,读入时先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的~一般输入的渠道来源于文件或者网络的二进制流。 在转化过程中,主要用到了一个格式化字符串(format strings),用来规定转化的方法和格式。 下面来谈谈主要的方法: struct.pack(fmt,v1,v2,.....) 将v1,v2等参数的值进行一层包装,包装的方法由fmt指定。被包装的参数必须严格符合fmt。最后返回一个包装后的字符串。 struct.unpack(fmt,string) 顾名思义,解包。比如pack打包,然后就可以.阅读全文
posted @ 2011-06-07 10:50 dkcndk 阅读(1044) | 评论 (0) 编辑
摘要: 1. Acceleo是MDA(Model Driven Architecture:模型驱动体系结构)的一个代码自动生成工具,Acceleo能把模型转换为Java,C#,PHP等代码。Acceleo基于 Eclipse平台以及EMF(Eclipse模型框架),开放源代码,可以免费使用。http://www.oschina.net/p/acceleo2.Trufun UML 2008http://www.trufun.net/new/product.html3. Visual Paradigm Suitehttp://www.visual-paradigm.com/download/4. PyUM阅读全文
posted @ 2011-05-06 16:49 dkcndk 阅读(3177) | 评论 (0) 编辑
摘要: Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块,它可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。本文介绍 Pexpect 的主要用法和在实际应用中的注意点。 Python 语言的爱好者,系统管理人员,部署及测试人员都能使用 Pexpect 在自己的工作中实现与命令行交互的自动化。Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。 Pexpect 的使用范围很广,可以用来实现与 ssh阅读全文
posted @ 2011-04-13 09:54 dkcndk 阅读(445) | 评论 (0) 编辑
摘要: EditPlus是我常用的文件编辑器之一,用它来下脚本程序甚是方便,下面来看看如果配置吧:1.先到www.editplus.com上下载editplus.exe,一步一步安装就好了,只有30天的试用期。2.来配置python环境,到www.editplus.com 上下载python配置环境,要下载对应的版本啊。(为了实现语法加亮和自动完成功能,需要下载python.acp和python.stx这两个特征文件:http://www.editplus.com/files/pythonfiles.zip)1):打开editplus,工具--》首选项--》用户工具点击组名称,工具组1重命名为pyth阅读全文
posted @ 2011-04-02 16:38 dkcndk 阅读(5707) | 评论 (0) 编辑
摘要: Python代码:import socket, loggingimport select, errnologger = logging.getLogger("network-server")def InitLog(): logger.setLevel(logging.DEBUG) fh = logging.FileHandler("network-server.log") fh.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.ERROR) formatter阅读全文
posted @ 2011-03-25 17:57 dkcndk 阅读(11039) | 评论 (0) 编辑
摘要: os.path.abspath(path) #返回绝对路径os.path.basename(path) #返回文件名os.path.commonprefix(list) #返回list(多个路径)中,所有path共有的最长的路径。os.path.dirname(path) #返回文件路径os.path.exists(path) #路径存在则返回True,路径损坏返回Falseos.path.lexists #路径存在则返回True,路径损坏也返回Trueos.path.expanduser(path) #把path中包含的"~"和"~user"转换成用户阅读全文
posted @ 2011-03-25 15:43 dkcndk 阅读(116385) | 评论 (3) 编辑
摘要: 1.open使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。file_object = open('thefile.txt')try: all_the_text = file_object.read( )finally: file_object.close( )注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。2.读文件读文本文件input = open('data', 'r')#第二个参数默认为ri阅读全文
posted @ 2011-03-20 12:11 dkcndk 阅读(13346) | 评论 (1) 编辑
摘要: 共享内存(Shared Memory)是最简单的进程间通信方式,它允许多个进程访问相同的内存,一个进程改变其中的数据后,其他的进程都可以看到数据的变化。共享内存是进程间最快速的通信方式:`进程共享同一块内存空间。`访问共享内存和访问私有内存一样快。`不需要系统调用和内核入口。`不造成不必要的内存复制。内核不对共享内存的访问进行同步,因此程序员必须自己提供同步。使用共享内存:`某个进程分配内存段。`使用这个内存段的进程要连接(attach)这个内存段。`每个进程使用完共享内存段后,要分离(detach)这个内存段。`在某个地方,必须有一个进程来销毁这个内存段。Linux的内存模型:`每个进程的虚阅读全文
posted @ 2011-03-14 10:17 dkcndk 阅读(15163) | 评论 (0) 编辑
摘要: Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的。 换句话说,我们可以把这个类的对象当作函数来使用,相当于重载了括号运算符。为了弄明白python中__setattr__, __getattr__, __delattr__, __call__的作用,重写dict,扩展其功能Code: class storage(dict):#通过使用__setattr__, __getattr__, __delattr__#可以重写dict,使之通过“.”调用def __setattr__(self, key, value):self[key] = val.阅读全文
posted @ 2011-03-10 23:40 dkcndk 阅读(22677) | 评论 (3) 编辑
摘要: 第一:给耗时操作增加统一的TimeOut超时处理机制无论是否启用了Python的多线程机制,只要利用signal模块就可以为耗时操作增加统一的超时处理机制(当然在使用了多线程的情况下还是有一些不一样的地方,只有在主线程里面才可以调用signal.signal函数,而子线程可以调用signal.alarm函数对信号的状态进行设置,具体需参照signal模块自身文档)。单线程情况下,可直接参考如下示例: Code:import signaldef handler(signum, frame):print 'Signal handler called with signal', si阅读全文
posted @ 2011-03-07 22:20 dkcndk 阅读(6414) | 评论 (1) 编辑
摘要: subprocess被用来替换一些老的模块和函数,如:os.system、os.spawn*、os.popen*、popen2.*、commands.*。可见,subprocess是被推荐使用的模块。subprocess模块中只定义了一个类: Popen。可以使用Popen来创建进程,并与进程进行复杂的交互。它的构造函数如下:subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, 阅读全文
posted @ 2011-03-03 22:55 dkcndk 阅读(497) | 评论 (0) 编辑
摘要: 在python中使用lambda来创建匿名函数。lambda来源于LISP语言。lambda的形式如下: lambda arg1,arg2... : <expression> lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则不同,它在创建函数对象的同时会进行这种操作。这是lambda的第一个特点。lambda的第二个特点是,它只是一个表达式,而不是一个语句。如果单独使它成为了一个语句,比如: lambda x: print x 如果你在你的python程序中写下了这么一行,那么毫无意义,这一行代码会创建一个函数对象,但马上又给丢弃了,因为你没有使用它的阅读全文
posted @ 2011-03-03 22:18 dkcndk 阅读(1700) | 评论 (0) 编辑
摘要: 从http://initd.org/tracker/pysqlite/wiki/pysqlite下载了SQLITE 的PYTHON绑定。并用WINDOWS下的sqlite3.exe创建了一个库一张表: +++++++++++++++++++ -database: wanna -table name: hello -id name ---- --------- 0 帅哥 1 wannachan 2 dick.chan 3 雯雯 +++++++++++++++++++好了,建表成功了!下面开始PYSQLITE来操作此数据库了!心情那个激动啊~~ 首先建立连接: >>> from 阅读全文
posted @ 2011-03-03 22:16 dkcndk 阅读(8326) | 评论 (0) 编辑
摘要: 在网上看到了一段python检索文件的程序,感觉不错,模仿着写了一段,但是发现无法检索带有中文的文件夹。查阅了一些资料后,才知道python(我用的2.6)对中文的支持很麻烦。可是皇天不负有心人,经过一系列的摸索,终于完成了对源程序的改良,现在,它可以检索任何文件夹了。程序如下:Code:#coding:utf-8#Filename:dir.pyimport osclass dir(object):def __init__(self):self.count=0self.space=""self.list=[]def p(self,url):if type(url).__na阅读全文
posted @ 2011-03-03 17:13 dkcndk 阅读(1517) | 评论 (0) 编辑
摘要: # -*- coding: utf-8 -*-import osimport shutilimport reimport sys'''功能:将一个文件夹中的指定类型的文件从gb2312或gbk转换成utf-8类型。遍历一个文件夹下所有文件,从src中取出处理后放入ddn中,src中的不变。指定src和ddn就可以了,还可以改文件处理部分完成别的功能'''src=os.getcwd()+'\\'+'!wwwroot'ddn=os.getcwd()+'\\'+'www'#########阅读全文
posted @ 2011-03-03 00:42 dkcndk 阅读(5603) | 评论 (0) 编辑
摘要: from:http://www.unixresources.net/linux/clf/python/archive/00/00/42/73/427317.html结合二位的答复,运行结果如下: >>> a='中国' >>> b=unicode(a, 'cp936') >>> b u'u4e2du56fd' >>> c = b.encode('utf-8') >>> c 'xe4xb8xadxe5x9bxbd' >>阅读全文
posted @ 2011-03-02 17:17 dkcndk 阅读(564) | 评论 (0) 编辑
摘要: 法一:isinstance(s, str) 用来判断是否为一般字符串isinstance(s, unicode) 用来判断是否为unicode或if type(str).__name__!="unicode":str=unicode(str,"utf-8")else:pass法二:Python chardet 字符编码判断使用 chardet 可以很方便的实现字符串/文件的编码检测。尤其是中文网页,有的页面使用GBK/GB2312,有的使用UTF8,如果你需要去爬一些页面,知道网页编码很重要的,虽然HTML页面有charset标签,但是有些时候是不对的。阅读全文
posted @ 2011-03-02 02:36 dkcndk 阅读(52495) | 评论 (0) 编辑
摘要: 环境 Apache + mod_python 如文件小可以采用这个方式import osdef form(): return """\<html><body><form enctype="multipart/form-data" action="./upload" method="post"><p>File: <input type="file" name="file"></p><p>阅读全文
posted @ 2011-02-28 23:49 dkcndk 阅读(23918) | 评论 (0) 编辑
摘要: http://www.cnblogs.com/mapig/archive/2009/08/07/1541442.htmlhttp://www.sqlite.com.cn/MySqlite/11/395.Htmlhttp://blog.163.com/db_lobster/blog/static/9639092200922511442177/http://blog.163.com/sea_haitao/blog/static/775621620096412211732/http://hi.baidu.com/tigerjgh/blog/item/e2b795188f7aebb14aedbcd0.阅读全文
posted @ 2011-02-25 07:22 dkcndk 阅读(468) | 评论 (0) 编辑
摘要: Python 用下划线作为变量前缀和后缀指定特殊变量。_xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线作为变量名的开始。因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对Python 来说有特殊含义,对于普通的变量应当避免这种命名风格。"单下划线" 开始的成阅读全文
posted @ 2011-02-24 21:50 dkcndk 阅读(788) | 评论 (0) 编辑
摘要: File Locking Using a Cross-Platform API 获得平台无关的文件锁 Credit: Jonathan Feinberg, John Nielsen 问题 ProblemYou need to lock files in a cross-platform way between NT and Posix, but the Python standard library offers only platform-specific ways to lock files. Python标准库未提供锁定文件的平台无关的方法,需要自己编写这样的平台无关(在NT和Posix阅读全文
posted @ 2011-02-24 21:16 dkcndk 阅读(3839) | 评论 (0) 编辑
摘要: Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递。举一个很常见的例子:>>> class Foo:def bar(self, message):print(message)>>> Foo().bar("Hello, World.")Hello, World.当存在继承关系的时候,有时候需要在子类中调用父类的方法,此时最简单的方法是把对象调用转换成类调用,需要注意的是这时self参数需要显式传递,例如:>>> cl阅读全文
posted @ 2011-02-24 20:37 dkcndk 阅读(51631) | 评论 (6) 编辑
摘要: conn = sqlite3.connection(" ... ") conn.text_factory = str #注意在连接后添加此语句即可设置python使用什么类型来处理sqlite3的text类型,默认是unicode,所以才会产生 OperationalError: Could not decode to UTF-8 column 'name' with text '国内其他' 这个错误 因为从数据库中取出数据时,是gbk编码(因为你上次存进去的是gbk) conn.text_factory的默认值是unicode,python阅读全文
posted @ 2011-02-14 19:22 dkcndk 阅读(1088) | 评论 (0) 编辑
摘要: select()系统调用提供一个机制来实现同步多元I/O:#include <sys/time.h>#include <sys/types.h>#include <unistd.h>int select (int n,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout);FD_CLR(int fd, fd_set *set);FD_ISSET(int fd, fd_set *set);FD_SET(int fd, fd_set *set);FD_ZERO(fd_阅读全文
posted @ 2011-02-12 17:56 dkcndk 阅读(425) | 评论 (0) 编辑
摘要: Python的标准库中的os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行。 下面列出了一些在os模块中比较有用的部分。它们中的大多数都简单明了。 os.sep 可以取代操作系统特定的路径分割符。 os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。 os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。 os.ge阅读全文
posted @ 2011-02-12 01:01 dkcndk 阅读(601) | 评论 (0) 编辑
摘要: Python中的列表(list)类似于C#中的可变数组(ArrayList),用于顺序存储结构。创建列表sample_list = ['a',1,('a','b')]Python 列表操作sample_list = ['a','b',0,1,3]得到列表中的某一个值value_start = sample_list[0]end_value = sample_list[-1]删除列表的第一个值del sample_list[0]在列表中插入一个值sample_list[0:0] = ['sample valu阅读全文
posted @ 2011-02-11 00:35 dkcndk 阅读(19680) | 评论 (0) 编辑
摘要: twisted-doc-zh(Twisted中文文档项目)挪到 Launchpad 上去了,详情请见:http://contrib.exoweb.net/wiki/TwistedDocZh另外,有个翻译《Twisted Network Programming Essentials》(《Twisted网络编程必备》)http://blog.csdn.net/gashero/category/277510.aspxTwisted简单安装和rpc简单使用示例from:http://wiki.huihoo.com/wiki/TwistedCode:http://twistedmatrix.com/tr阅读全文
posted @ 2011-02-10 23:57 dkcndk 阅读(1694) | 评论 (0) 编辑
摘要: 在安装 PyDev 之前,要保证您已经安装了 Java 1.4 或更高版本、Eclipse 以及 Python(环境变量path里加上;C:\Python26)。接下来,开始安装 PyDev 插件。利用 Eclipse Update Manager 安装 PyDev。在 Eclipse 菜单栏中找到 Help > Software Updates > Find and Install。 选择 Search for new features for install,然后单击 Next。在显示的窗口中,选择 new remote site。此时,这里,名称项输入 PyDev;链接里输入阅读全文
posted @ 2010-12-14 01:59 dkcndk 阅读(7223) | 评论 (1) 编辑
摘要: 作者:limodou 在运行程序时,你可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为"-"加上单个字母选项;长选项为"--"加上一个单词。长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单,下面我就向大家介绍它的用法。 取得命令行参数 在使用之前,首先要取得命令行参数。使用sys模块可以得到命令行参数。 import sys print sys.argv 然后在命令行下敲入任意的参数,如: pytho阅读全文
posted @ 2009-07-31 19:10 dkcndk 阅读(475) | 评论 (0) 编辑
摘要: 其实很简单,用python -m py_compile file.pypython -m py_compile /root/src/{file1,file2}.py编译成pyc文件。也可以写份脚本来做这事:Code:import py_compile py_compile.compile('path') //path是包括.py文件名的路径用python -O -m py_compile file.py编译成pyo文件。1.其中的 -m 相当于脚本中的import,这里的-m py_compile 相当于上面的 import py_compile 2.-O 如果改成 -OO 则阅读全文
posted @ 2009-04-16 19:13 dkcndk 阅读(91991) | 评论 (2) 编辑