2009/06/30

Linux下用smbmount命令挂载Windows共享

没有评论:
在Windows操作系统之间,可以通过映射网络驱动器的方式,将某个共享目录映射成一个磁盘文件系统,在Linux下,可以通过smbmount命令来实现相似的功能,将Windows的某个共享目录挂载到Linux下的某个目录下。

Note: ubuntu GUI下的"connect to server"并未真正mount windows shared filesystem, so can not see any mounted directory in terminal.

Let's manually mount a windows share thru commands!


1. Install smbmount

sudo apt-get install smbfs


2. Create a mount point "~/Desktop/winxp" in Ubuntu

fanghui@vbox:~/Desktop$ mkdir winxp # 必须先创建目录 winxp


3. smbmount command.

语法:smbmount //IP地址/共享名 挂载点 -o username=xxx,password=yyy
For example:
挂载整个c$共享
$ sudo smbmount //155.69.148.204/c$ ~/Desktop/winxp -o username=xxx
Password:

挂载某个目录"fanghui"
$ sudo smbmount //155.69.148.204/fanghui ~/Desktop/winxp -o username=xxx,password=xxxxxx


现在用mount查看,会看到最末一行:
//155.69.148.204/fanghui on /home/fanghui/Desktop/winxp type cifs (rw,mand)

4. umount
$ sudo umount ~/Desktop/winxp


Refer to:
Accessing an SMB Share With Linux Machines

2009/06/29

Pyrex- 连接Python与C的桥梁

没有评论:
使用Pyrex将从Pyrex代码生成一个C源文件,编译该C源文件即可生成Python的扩展模块。从而使编写Python的C扩展更加容易。Pyrex在 Python 中添加了类型声明,使得Python与C数据类型相互转换变得容易。
ubuntu 下安装: sudo apt-get install pyrex

windows 下安装: 从其官方网站http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex下载Pyrex的ZIP文件。将其解压后,进入其目录,运行如下所示命令将安装Pyrex。
python setup.py install
它将 pyrexc.py放在 c:\python25\Scripts\目录下。


首先编写如下所示“test.pyx”文件。
def test(): return 'A test file!'

windows下转换test.pyx成C, 运行如下所示的命令:
c:\python25\python.exe c:\python25\Scripts\pyrexc.py test.pyx
运行完命令后将在目录中生成“test.c”.

在VC++ 中将“test.c”编译或链接。


Pyrex文件语法

Pyrex文件完全使用了Python的语法。在编写Pyrex文件时,只需按照Python的语法编写即可。在Pyrex中可以定义C语言中的结构体、枚举等类型,也可以使用C语言中的数据类型。

1.数据类型

Pyrex定义了与C语言中相对应的数据类型,使用“cdef”可以在Pyrex中使用C语言中的数据类型。代码如下所示。
cdef char *s # 相当于C中的字符串
cdef int x,y # 相当于C中的int型
cdef int z[4] # 相当于C中的数组
cdef float f # 相当于C中的浮点型
cdef int *p # 相当于C中的指针

2.结构体、联合及枚举

除了定义C中的数据类型以外,还可以使用“cdef”定义C中的结构体、联合、枚举等。代码如下所示。
cdef struct Human: # 定义结构体
char *name
char *sex
int age
cdef union Fruit: # 定义联合体
char *apple
char *banana
char *orange
cdef enum: #定义枚举
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

3.函数

使用“cdef”可以像使用Python中的 “def”一样来定义一个函数。在Pyrex文件中既可以使用“def”来定义函数,也可以使用“cdef”来定义函数。不同的是,使用“def”定义的 函数,只能使用Python的数据类型,而使用“cdef”定义的函数则可以使用C中的数据类型。另外,使用“def”定义的函数可以被模块导出,在 Python中使用。而使用“cdef”定义的函数则不能被Python使用。代码如下所示。
cdef int sum(int x, int y): # 使用C数据类型定义函数
return x + y
cdef sum(x, y): # 如果没有声明参数类型,则表示为Python中的类型
return x + y
cdef object sum(object x, object y): # 使用object显式地表示参数为Python中的类型
return x + y

4.使用类

使用“cdef”也可以在Pyrex文件中定义类。需要注意的是如果通过继承创建类,则父类应该在该Pyrex文件中定义,否则应该使用“extern”表示父类在外部定义。代码如下所示。
cdef class Stud: # 使用cdef定义类
def setname(self,n): # 定义setname方法
self.name = n
def showname(self): # 定义showname方法
print self.name
cdef class Student(Stud): # 通过继承创建类
def setnum(self,n): # 定义setnum方法
self.num = n
def shownum(self): # 定义shownum方法
print self.num

5.使用include和外部C函数

Pyrex支持类似于C语言头文件的“.pxi”文 件。使用“.pxi”可以将较大的Pyrex文件分成多个文件,这样便于维护。“.pxi”文件像C语言中的头文件一样,只要使用“include”包含 就可以了。除此以外,在Pyrex中也可以使用C语言头文件中声明的函数原型。例如使用Python/C API中的 PyRun_SimpleString函数,则可以使用如下写法。
cdef extern from "Python.h":
int PyRun_SimpleString(char *command)

python使用pyrex编译成可执行文件

没有评论:
使用pyrex,python完全可以用来开发商业软件,而不用担心源代码泄露。
在http: //www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/下载。本来Pyrex是一个用来混合 编写python和c程序的东西,然后转换为c代码,再编译成可执行文件。于是这里就相当于提供了一种方法可以将python代码转换为c代码,这样就可 以把python程序编译为真正的可执行文件了。

而py2exe只是一个对python程序打包的工具。它可以让这个程序脱离python环境来执行,但并不能保护源代码,因为源 代码其实也包含在其中。

步骤:
1。使用obfuscator 混淆 python 代码;
2。使用 pyrex转换成C代码;
3。编译成exe或者dll库。


假设我们有一个简单的python程序,文件名为 go.py
def add(a, b):
print a+b # 为了方便看到函数调用,输出一下
retur a+b
仅仅做一个简单的加法操作。那我们想把它编译为可执行文件的话,需要进行以下几步:
1.修改go.py文件,在里面添加一个c函数,当然要用Pyrex的语法,用这个函数来调用python程序的入口函数(在这里就是add了)。修改go.py为go.pyx。
在这里就是添加一个:
cdef public int c_add(int a, int b):
return add(a, b)
2.添加一个头文件 go.pxi,让主函数能找到go.py里的c函数的申明
cdef extern int (c_add(int, int))

3.编写一个主函数文件main.c,在该主函数中包含go.h(这个文件会自动生成), 并调用前面设计的c函数。
#include
#include
#include
#include "go.h"

int main(int argc, char *argv[])
{
Py_Initialize();

initgo(); // 这个地方的函数名字为init加上模块名,就是原来那个py文件的名字
c_add(2, 5);

Py_Finalize();
return 0;
}
好了,现在编译就是:
pyrexc go.pyx
gcc go.c main.c -I/usr/include/python2.5 -L/usr/lib/ -lpython2.5 -o go
就生成了叫go的可执行文件,执行它,就得到了想要的结果!

注:此方法在linux上通过。

2009/06/20

ubuntu下比较文件

没有评论:
under terminal:
diff file1 file2
vimdiff file1 file2
gvimdiff file1 file2 (图形界面)

python的调试

没有评论:
一般直接看stderr 输出, 或者打印到stdout。如某些情况无法在terminal看到输出( 如python非主程序,被C调用 ),可以重定向到文件:

# in python script
stdout = open("file.log", "w")
stderr = stdout

print "debug thing..."

然后到文件中查看。

更进一步,如果需要单步跟踪,可以使用 pdb 调试。 其在windows下为 wxpython + winpdb

gparted: ubuntu下分区工具

没有评论:
本机在一个物理硬盘上装了两个操作系统:Ubuntu9.04 and Windows XP.分别在D:, C:。 一不小心ubuntu分区给少了,现需要重新划分其分区大小,而不影响windows系统。

________________________________________________________________________
|Windows NTFS _____________________| Ubuntu ext3_____ |Ubuntu swap|
________________________________________________________________________

使用 gparted 工具:

1. Get GParted and burn it into a CD.
2. Boot machine from this CD.
3. Delete ubuntu partition, and create new one
4. Reinstall Ubuntu system.

Note: Gparted 也可 resize, delete, and extend partitions.