如何让sublime text2的build系统在win下支持中文路径

2012年7月30日 没有评论

Sublime text 2的build系统不支持中文路径,根据报错可以知道是因为中文编码的问题,win下的编码为(gbk),sublime text2默认为,可以通过如下方式解决:

打开sublime_plugin.py文件

添加以下内容:

reload(sys)
sys.setdefaultencoding(‘gbk’)

保存即可

分类: 关于技术 标签: ,

python简单模拟grep

2012年7月20日 没有评论

我的需求:把一个文件里包含特定字符串的行提取出来

代码:

import re 
def grep(file,exp): 
    fd=open(file,'r') 
    lines=fd.read().splitlines() 
    fd.close()
    logs=[] 
    for line in lines: 
        if re.search(exp,line): 
            logs=logs.append(line) 
    return logs

这样是符合我需求了,大家可以按需扩展。

分类: 关于技术 标签: ,

python字符串转字典的方法

2012年7月17日 没有评论

原始数据:line=”playerId:68719477698,time:1339689601168,module:78,type:2,cost:3,nowGold:0,nowGift:88”

目的:取得playerId,time等的值。

思路:把这个字符串转化为字典

实现代码:

list=line.split(‘,')
d={}
for i in list:
     d[i.split(':')[0]]=i.split(':')[1]

然后取值就很方便了。

分类: 关于技术 标签:

python调用C函数(一)

2012年7月5日 没有评论

python调用C,目前,看到了以下几种方式

1. 把c编译成动态链接库,然后通过cdll模块来调用c暴露的接口,其实这是二进制ABI接口
2. 通过c把函数注册给python,依旧是dll/so的模式,但是,python不需要通过cdll模块来调用函数,可以和python内置函数一样调用

首先是如何通过动态连接库的方式来调用c函数:
定义一个func函数,然后,把他编译成一个动态链接库
cl /c demo.c
link /DLL demo.o /out:demo.dll

gcc -c -fPIC demo.c -o demo.o
gcc -shared demo.o -o demo.so

// demo.c
#ifdef MSVC
#define PYAPI __declspec(dllexport)
#else
#define PYAPI
#endif

/*
* 定义一个func函数,供python调用
*/
int PYAPI func(int a, int b)
{
return a + b
}

————————————cut line—————————

import sys
sys.path.append(‘./’)
from ctypes import cdll

dll = cdll.LoadLibrary(‘demo’) # 加载函数所在的动态连接库
ret = dll.func(1, 100) # 调用动态链接库内部的func函数
print ret

需要注意的是,对于windows平台,绝大部分的API都是stdcall,对于stdcall函数,如果需要调用的话,需要使用windll,而不是cdll,否则会导致堆栈不平衡崩溃。
(注意,windows user32.dll下面的那些函数,比如sprintf_s等等,都用cdll调用)

如果把PYAPI宏这样定义:
#define PYAPI __declspec(dllexport) __stdcall

那么,就需要用windll了

import sys
sys.path.append(‘./’)
from ctypes import windll
dll = windll.LoadLibrary(‘demo’)
ret = dll.func(1, 100)
print ret

其实,windll只是继承了一下cdll,更改了下函数调用约定,仅此而已

看起来,似乎是没有啥问题了,但是如果C暴露给python的函数,参数是struct类型,python里面看起来是,是没有struct类型的,那么,如何调用C的函数呢?

这里,就需要一个新的class了
ctypes.Structure

分类: 关于生活 标签:

SVN代码回滚

2012年5月24日 没有评论

不知道什么时候干了个错事儿,把错误的代码给提交上去了,由于提交的时候的commit是乱写的,故而很悲剧。写个文章mark下,提醒我下次commit记得认真写。记录下回滚的过程吧:

1、svn info filename 看看文件的最新版本号

2、先svn log filename下,看看日志,筛选下日期

3、svn diff –r a:b filename 查看代码改动

4、找出需要回滚的版本号

5、svn merg –r n(当前版本): o(需要回滚版本)  filename

分类: 关于技术 标签: