SagerXiao's Blog

Restart of an old programmer

Python应用只启动一个进程

后台进程我们只希望运行一次,我们可以通过对pid进行控制进程仅启动一次,参考程序

Control one process
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import os, sys

def lockPidFile(lockfile):
    pidfile = open(lockfile, 'a+')
    try:
        pid = pidfile.read()
        if pid is not None and len(pid.strip()) > 0:
            tmpfile = lockfile + ".tmp"
            os.system("ps -A|grep %s > %s" % (pid, tmpfile))
            tmp_size = os.path.getsize(tmpfile)
            os.remove(tmpfile)
            if (tmp_size > 0):
                return False

        pidfile.close()
        pidfile = open(lockfile, 'w')
        pidfile.write(str(os.getpid()))
        return True

    finally:
        pidfile.close()

    return False

常用的shell指令

1.合并所有lst文件,排序,去重,输出到my.list

Scripts collections
1
cat *.lst|sort|uniq > my.list   #合并排序去重

2.使用tar拷贝目录下的所有文件

Copy all files
1
2
3
4
5
6
7
(cd /source/directory && tar cf - .)|(cd /dest/directory && tar xpvf -)

cd source/directory
tar cf - . |(cd /dest/directory; tar xpvf -)

cp -a /source/directory/* /dest/directory
cp -a /source/directory/* /source/directory/.[^.]* /dest/directory
Using tar
1
bunzip2 linux-2.6.13.tar.bz2 | tar xvf -

Python循环遍历所有文件并改名

我希望将某个目录下的所有jpeg文件改名为jpg结尾的文件,可以利用os.walk和os.rename两个功能

walk all files in special directory
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python
import os

def walkDir(rootdir=None):
    print rootdir
    count = 0
    for parent, dirnames, filenames in os.walk(rootdir):
        #for dirname in dirnames:
        #    print "parent is:" + parent
        #    print "dirname is:" + dirname
        for filename in filenames:
            if filename[-5:] == ".jpeg":
                src_file = os.path.join(parent, filename)
                dest_file = src_file[:-5] + ".jpg"
                os.rename(src_file, dest_file)
                count += 1
    print 'Rename total file count is:', count

def main():
    walkDir(os.getcwd())

if __name__ == "__main__":
    main()

Python计算文件行数的三种方法

Python计算文件行数的三种方法

Caculate file lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import timeit,os
def linecount_1():
    return len(open('data.sql').readlines())    #最直接的方法

def linecount_2():
    count = -1 #让空文件的行号显示0
    for count,line in enumerate(open('data.sql')): pass
    #enumerate格式化成了元组,count就是行号,因为从0开始要+1
    return count+1
 
def linecount_3():
    count = 0
    thefile = open('data.sql','rb')
    while 1:
        buffer = thefile.read(65536)
        if not buffer:break
        count += buffer.count('\n') #通过读取换行符计算
    return count
 
for f in linecount_1,linecount_2,linecount_3:
    print f.__name__,f()
     
    for f in linecount_1,linecount_2,linecount_3:
        #第一个参数是函数,第二个参数是环境,例如import模块
        t = timeit.Timer(f,'')
        #第一个参数是重复整个测试的次数,第二个参数是每个测试中调用被计时语句的次数。
        print min(t.repeat(100,3))

RPM使用详解

RPM使用详解

在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM)。此工具包最先是由Red Hat公司推出的,后来被其他Linux开发商所借用。由于它为Linux使用者省去了很多时间,所以被广泛应用于在Linux下安装、删除软件。下面就给大家介绍一下它的具体使用方法。

1.我们得到一个新软件,在安装之前,一般都要先查看一下这个软件包里有什么内容,假设这个文件是:Linux-1.4-6.i368.rpm,我们可以用这条命令查看:

rpm -qpi Linux-1.4-6.i368.rpm

系统将会列出这个软件包的详细资料,包括含有多少个文件、各文件名称、文件大小、创建时间、编译日期等信息。

Linux配置Nginx+uWsgi环境

转Python后碰到的最大的问题就是服务器配置,产品环境最终还是需要用到Nginx+uWsgi,折腾过好久,把操作记录放在这里,方便查询

我的环境:RHEL6,python2.6.6,Nginx1.2.6,uWsgi1.4.4(都是从官方网站下载的最新版本)

1.环境准备

先更新系统,并安装编译环境等等。

Prepare environment
1
2
3
4
yum update
yum install glib2-devel openssl-devel pcre-devel bzip2-devel gzip-devel\
    python python-devel libxml2 libxml2-devel python-setuptools zlib-devel\
    wget pcre pcre-devel sudo gcc make autoconf automake

2.编译安装Nginx

先到Nginx官网下载最新稳定版本的Nginx1.2.6,编译安装

最有用的Linux命令列表

$ sudo !!

Run the last command as root

Useful when you forget to use sudo for a command. “!!” grabs the last run command.


$ python -m SimpleHTTPServer

Serve current directory tree at http://localhost:8000/


$ :w !sodu tee %

Save a file you edited in vim without the needed permissions

I often forget to sudo before editing a file I don’t have write permissions on. When you come to save that file and get the infamous “E212: Can’t open file for writing”, just issue that vim command in order to save the file without the need to save it to a temp file and then copy it back again.