Skynet

---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

#

使用 File::Find
use File::Find;
use Time::Piece;


$timeOneDay = 86400;
$dayMultipler = 1;

$ByteCount = 0;
$fileAll = 0;
$fileJpg = 0;
$fileYes = 0;
$pathToTra = ".";

$gt = localtime;
$t1 = $gt->epoch;
find(
\&fileThumb, $pathToTra);
$gt = localtime;
$t2 = $gt->epoch;

print "Total KByte: ".($ByteCount/1024)."\n";
print "Total Scan:  ".$fileAll."\n";
print "Total Jpeg:  ".$fileJpg."\n";
print "Total Match: ".$fileYes."\n";
print "Total TimeCost: ".($t2-$t1)."\n";

sub fileThumb
{
   
$fileAll++;
   
if ((/.*\.jpg$/) )
   {   
      
$fileJpg++;
      
my $lt = 0;
      
$lt = localtime;

      
my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks= stat($_)  or die "Unable to stat $_\n";           
      
if ( $mtime < ($lt->epoch - $timeOneDay*$dayMultipler) )
      {
         
print "[ $fileYes ]"."$File::Find::name";
         
print $size." ".$ctime." ".$lt->epoch."\n";
         
$ByteCount += $size;
         
$fileYes++;
      }
   }
}



 

posted @ 2009-02-23 23:55 刘凯毅 阅读(452) | 评论 (0)编辑 收藏


日志
#!/bin/perl
use Encode ;
open(NOTESFILES,$ARGV[0]);

my %errorMeganotes;

print ">>>>>>>>>>>>>>",$ARGV[0],"<<<<<<<<<<\n";

while (<NOTESFILES>) {
  
if$_=~/^(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})\s+ERROR\s+(.*)\s/g ){
     
if($errorMeganotes{$2}){
       
push @{$errorMeganotes{$2}},$1;
     }
else{
       
$errorMeganotes{$2}=[$1];
     }
  }
}

for(keys %errorMeganotes){
  
my $tmp_keys=$_;
  
my @tmp_array= @{$errorMeganotes{$tmp_keys}};
  
print "error number :>>",scalar(@tmp_array),"<<\n",encode("GBK",decode("UTF-8",$tmp_keys)),"\n",join(",\t",@tmp_array),"\n\n\n";
}


sh
#!/bin/sh
nowDate=$(date -'-1 day' +%Y-%m-%d);
echo $nowDate

perl 
/data/apps/shell/meganotesErrorLog.pl /data/apps/meganotes/tomcat/logs/app/app.log.$nowDate >  _tmp_$nowDate ;
perl 
/data/apps/shell/meganotesErrorLog.pl /data/apps/schedule/tomcat/logs/app/app.log.$nowDate  >> _tmp_$nowDate ;


mail 
-s $nowDate-ERROR-log  my@mail.com  <  _tmp_$nowDate;
rm _tmp_$nowDate ;

结果:
>>>>>>>/data/apps/meganotes/tomcat/logs/app/app.log.2009-02-18<<<<<<<<<
error number :>>2<<
MusicActionOpLogProxy:142 - music.popularTime=[Invalid field value for field "music.popularTime".]
2009-02-18 15:53:54,    2009-02-18 16:00:12
。。。。。。



posted @ 2009-02-19 13:01 刘凯毅 阅读(1493) | 评论 (0)编辑 收藏


参考:
  http://my.huhoo.net/archives/2007/08/perl_1.html

简单的
   echo "tt" |perl  -ne  'print $_ '
多行
   find . -type f |perl  -ne  'print $1 $_ if $_=~ /(.*)flv/'
限定行数
   find . -type f |perl  -ne  'print $_ if $_=~ /.*flv/ && $tmp++<10 && $tmp>4'
    #当然shell>> find . -type f |grep ".*flv" |sed -n '5,10p' 和上面是一样的
    # 不过 你看那  其中使用 $1 等正则重定向 ,哈哈
结果大体上
./test3/0.flv
./flvplayer.swf
./test.flv
./0.flv




perl -h
  -e program        one line of program (several -e's allowed, omit programfile)
  -n                assume "while (<>) { ... }" loop around program
  -p                assume loop like -n but print line also, like sed




posted @ 2009-02-17 17:39 刘凯毅 阅读(1455) | 评论 (0)编辑 收藏



普通的 log4j 日志 ;
当然 特殊要求 特殊处理 。
#!/bin/perl
open(FILES,"/data/apps/schedule/tomcat/logs/app/app.log.2009-02-17");
while (<FILES>) {
    
next if !/^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s+ERROR\s+/;
    
if($_=~/(.*-){3}(.*?):(.*)$/g){
        
$error{$2}++ ;
    }
elsif($_=~/(.*-){3}(.*)/g ){
        
$error{$2}++ ;
    } 
    。。。。。
    }   
print "$_: $error{$_}\n" for(keys %error);

 java.net.SocketTimeoutException: 4
 test1 illegal!: 4
 cd illegal!: 4
 test2 illegal!: 4
 MusicAlbum not exists: 5
 Not Found Any File: 14
 java.net.ConnectException: 3
 Album not exists: 2
 。。。


posted @ 2009-02-17 15:50 刘凯毅 阅读(1549) | 评论 (0)编辑 收藏


写 shell 使用 if  留个文
说明:
   下面可学习到
       1. 当 sh 文件接受到 2个,1个,或无参数时 解决办法(注意 $1 要 "$1" 这样使用 )
       2. sh 中 参数赋值 _var = $(...)
       3. 取得当前时间  $(date +%Y-%m-%d) 前天时间 $(date -d '-1 day' +%Y-%m-%d)

if [ -n "$2" ] ; then
     mydate
=$1
     _copyright
=/data/ftp_share/copyright/$2-copyright.000
     _walkman
=/data/ftp_share/copyright/$2-walkman.000
     _fullsong
=/data/ftp_share/copyright/$2-fullsong.000
     _shaker
=/data/ftp_share/copyright/$2-shaker.000
     _color
=/data/ftp_share/copyright/$2-color.000
elif  [ 
-n "$1" ]  ;then
  mydate
=$1
  _copyright
=$(python findIncBizDataFile.py copyright $1)
 _walkman
=$(python findIncBizDataFile.py  walkman $1)
 _fullsong
=$(python findIncBizDataFile.py  fullsong $1)
 _shaker
=$(python findIncBizDataFile.py  shaker $1)
 _color
=$(python findIncBizDataFile.py  color $1)    
else    
  
#ydate=$(date -d '-1 day' +%Y-%m-%d)
  mydate=$(date +%Y-%m-%d)
  _copyright
=$(python findIncBizDataFile.py copyright)
 _walkman
=$(python findIncBizDataFile.py walkman)
 _fullsong
=$(python findIncBizDataFile.py fullsong)
 _shaker
=$(python findIncBizDataFile.py shaker)
 _color
=$(python findIncBizDataFile.py color)
fi;





if 参数说明
  • –b 当file存在并且是块文件时返回真
  • -c 当file存在并且是字符文件时返回真
  • -d 当pathname存在并且是一个目录时返回真
  • -e 当pathname指定的文件或目录存在时返回真
  • -f 当file存在并且是正规文件时返回真
  • -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
  • -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
  • -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
  • -p 当file存在并且是命令管道时返回为真
  • -r 当由pathname指定的文件或目录存在并且可读时返回为真
  • -s 当file存在文件大小大于0时返回真
  • -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
  • -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
  • -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。

UNIX Shell 里面比较字符写法:

  • -eq   等于
  • -ne    不等于
  • -gt    大于
  • -lt    小于
  • -le    小于等于
  • -ge   大于等于
  • -z    空串
  • =     两个字符相等
  • !=    两个字符不等
  • -n    非空串


在这有个比较郁闷的地方 (sunnycare指正,问题经过修改
  有那个 能帮我下 if and 使用
比如:
if [ -z ] && [ -z ]; then echo 11else echo 22; fi;
结果 
11 (正确)

if [ -1 ] && [ -n ]; then echo 11else echo 22; fi;
结果 
11 (错误)
这是 不能理解的 地方,

if [ -1 ] && [ -'' ]; then echo 11else echo 22; fi;

if [ -1 ] && [ -"" ]; then echo 11else echo 22; fi;
结果 
22 (正确)

应该是 22 但结果是 11 郁闷!!



posted @ 2009-02-02 10:35 刘凯毅 阅读(5045) | 评论 (1)编辑 收藏


这个函数,好像有 。net的影子

class C(object):
    
def __init__(self): self._x = None
    
def getx(self): print "get x";return self._x
    
def setx(self, value): print "set x"; self._x = value
    
def delx(self): print "del x";del self._x
    x 
= property(getx, setx, delx, "I'm the 'x' property.")


使用
>>> t=C()
>>> t.x
get x
>>> t.x="en"
set x
>>> print t.x
get x
en
>>> del t.x
del x
>>> t.x
get x
posted @ 2009-01-14 10:25 刘凯毅 阅读(1198) | 评论 (0)编辑 收藏


我这就抛砖引玉了,大家多指教。

参考:
http://pycurl.sourceforge.net/doc/pycurl.html
如果想多线程下载,请关注下面url
   http://groups.google.com/group/python-cn/msg/cdbe671b814fd3af
http://www.pythonclub.org/doku/index.php/python-network-application/pycurl

(个人粗略认为)原理:
     把服务器上的文件分n“等份”,再在准备下载地址按等分一一填充到文件中。
     当 下载 “等份数据” 时如果未能正常结束,从头下载次等份数据。正常结束后线程下载下一等分。

   好比:
   服务器文件(x):  1111111
   待填充文件(y): 0000000
   运行1:(2分钟)
     文件(x):0101001 
   接着运行2:(1分钟,断点续传)
     文件(x):1111001

   最后:文件(x):1111111


需要技术:
    1.按切割下载
    2.本地创造与服务器文件一样大小空文件。
    2.等份写入


 技术1代码(按切割下载).
c.setopt(pycurl.RANGE, '%d-%d' % (5001000))
 
import pycurl
= pycurl.Curl()
c.setopt(pycurl.URL, 
"http://www.python.org/")
c.setopt(pycurl.HTTPHEADER, [
"Accept:"])
import StringIO
= StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.FOLLOWLOCATION, 
1)
c.setopt(pycurl.MAXREDIRS, 
5)
c.setopt(pycurl.RANGE, 
'%d-%d' % (5001000))
c.perform()
print b.getvalue()
 

技术2(本地创造与服务器文件一样大小空文件)
    def allocate_space(self):
        
'''
        预分配文件空间(通用?)
        
'''
        afile 
= file(self.url_info['file'], 'wb')
        afile.truncate(self.url_info[
'size'])#文件大小限定
        afile.close()

技术3(等份写入 file.seek):
    #----关键----
    def write_cb(self, data):
        
if self.piece:
            self.result.seek(self.piece[
1+ self.piece_downloaded, 0)
        self.result.write(data)
        self.result.flush()
        size 
= len(data)
        self.link_downloaded 
+= size
        self.piece_downloaded 
+= size
        self.total_downloaded 
+= size
        
if self.is_stop: return -1


pycurl 学习笔记:
$ftp读取
import pycurl
tfile
='ftp://name:pass@218.200.***.***/tongbu/test.txt'
= pycurl.Curl()
c.setopt(pycurl.URL, tfile)
import StringIO
= StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.FOLLOWLOCATION, 
1)
c.setopt(pycurl.MAXREDIRS, 
5)
#c.setopt(pycurl.RANGE, '%d-%d' % (2, 6))
c.perform()
print b.getvalue()

下载写入:
    bean_pycurl=pycurl.Curl()
    ...
   
    bean_
pycurl.setopt(pycurl.WRITEFUNCTION, write_cb)
    ...

    
def write_cb(data):
        file.write(data)
        ..



  
posted @ 2009-01-07 19:37 刘凯毅 阅读(4786) | 评论 (1)编辑 收藏


和网上的相比 ,就是 linux使用
http://www.jython.org/Project/download.html
下载 jython 包,(安装!不,就直接解压jar 就可以用了,我 linux 没有窗口!可怜 )
jar   -xvf  jython_install.jar

使用 root
vim /etc/profile #添加
export JAVA_HOME=/usr/local/jdk1.5.0_17
export CLASSPATH
=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/home/xj_liukaiyi/src/java/lib/ojdbc14-1.0.jar:/home/xj_liukaiyi/src/jython/evn_lib/jython.jar
export PATH
=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
alias jython
='java org.python.util.jython '

测试 oracle
#!jython
from oracle.jdbc.driver import OracleDriver
from java.sql import DriverManager
def connect(un='dbuser', pw='pass123', sid='ora10g', host='192.168.102.223', port='1688'):
    driver 
= OracleDriver()
    DriverManager.registerDriver(driver)
    connection 
= "jdbc:oracle:thin:@%s:%s:%s" % (host, port, sid)
    
return DriverManager.getConnection(connection, un, pw)


def doSelect(strSql,func=None,doConn=None):
    is_now_conn
=None
    
if not doConn :
        is_now_conn
=True
        doConn
=connect()
    stmt 
= doConn.createStatement()
    datas
=[]
    rows
=0
    
try:
        
try:
                rset 
= stmt.executeQuery(strSql)
                ccount
=rset.getMetaData().getColumnCount()
                data
=[]
                
while (rset.next()):
                        rows
=rows+1
                        
#print rset.getObject(1)
                        for ii in range(ccount):
                                data.append(rset.getObject(ii
+1))
                
if func :
                        func(data,rows)
                datas.append(data)
        
except:
                
pass
    
finally:
        
try:
                stmt.close()
        
finally:
                
if is_now_conn   :
                        doConn.close()
                        
print "-conn close-"
    
return datas

def runRow(data,rows):
        
print "runRow row=%s data=%s " % (rows,data)

if __name__ == "__main__":
    
#模式1 定义一次 conn close
    #可插拔式 定义方法使用 runRow (罗嗦下java 要达到只能写接口 !)
    doSelect('select count(*) from MN05_TBL_BIZ  ',runRow)

    
#模式2 外部定义 conn 并,可多次使用 后 conn close
    conn=connect()
    
print doSelect('select count(*) from MN05_TBL_COPYRIGHT  ',doConn=conn)
    
print doSelect('select count(*) from MN05_TBL_BIZ  ',doConn=conn)
   

   from java.lang import *
   print tts[2]
   #梁咏琪   #有换行 这 使用 java.lang.String.trim 
   #
   sql="""
    select tb.NAME 
    from MN05_TBL_BIZ tb , MN05_TBL_COPYRIGHT  tc 
    where 
        tb.copyright_id=tc.COPYRIGHT_ID and 
        tb.actor = '%s'
        
    """ %String(tts[2]).trim()  )
   
#中文匹配问题这 使用 decode('utf8') 变成unicod 就可以了
   

    arr=db.doSelect(sql.decode(
'utf8'),doConn=conn)
   
for t in arr[0]:
       print t.encode('utf-8')

   
conn.close()



jython 结果
-bash-3.00$ jython  db.py
runRow row=1 data=[3487033]
-conn close-

[[1563479]]
[[3487033]]


posted @ 2008-12-19 19:17 刘凯毅 阅读(1115) | 评论 (0)编辑 收藏



./pyftp_sync.py /tongbu/day/spbusinessinfo/all/$mydate-walkman.000 $mydir$mydate-walkman.000 218.205.XXX.XXX Name Pass123 get >> pyftp_sync.log

#!/usr/bin/python
#
 -*- coding: utf-8 -*-
import ftplib
import datetime
import os
import sys
import socket
import time
#time access
TF0='%Y-%m-%d-%H:%M:%S'
MAX_RETRY
=60
SLEEP_TIME
=30
#
#
虏脦媒潞
#
脦录镁卤戮碌氐脴路
#
脦录镁ftp目碌牡脴路
#
ftp ip
#
ftp脫禄搂脙
#
ftp脙脗
#

#cal src file path
dpath=sys.argv[1]
print "[" + datetime.datetime.now().strftime(TF0)+"] - "+"dpath="+dpath
#cal desc file path
spath=sys.argv[2]
ftp_addr
=sys.argv[3]
ftp_usr
=sys.argv[4]
ftp_pwd
=sys.argv[5]
ftp_method
=sys.argv[6]
print "[" + datetime.datetime.now().strftime(TF0)+"] - "+"spath="+spath
print "[" + datetime.datetime.now().strftime(TF0)+"] - "+"ftp="+ftp_addr+",user="+ftp_usr+",pwd="+ftp_pwd


if ftp_method == 'put' and os.path.isfile(spath) is False:
        
print "[" + datetime.datetime.now().strftime(TF0)+"] - [ERROR] "+"spath="+spath+" not exists"
else:

        
for i in range(MAX_RETRY):
                
try:
                        
#ftp connection
                        ftp = ftplib.FTP()
                        ftp.set_debuglevel(
2)
                        ftp.connect(ftp_addr,
21)
                        ftp.login(ftp_usr, ftp_pwd)
                        
#ftp.mkd("test1")
                        if ftp_method == 'put':
                            
print "put"
                            ftp.storbinary(
"STOR " + dpath, open(spath))
                        
if ftp_method == 'get':
                            
print "get"
                            
#ftp.set_pasv(True);
                            ftp.retrbinary("RETR " + dpath, open(spath,'wb').write)
                        
#ftp.storlines("STOR " + dpath, open(spath))

                        
#check file
                        sfile_size=os.path.getsize(spath)
                        
print "[%s] - file size=%.3fK" % (datetime.datetime.now().strftime(TF0), sfile_size/1024)
                        dfile_size
=ftp.size(dpath)
                        
if sfile_size == dfile_size:
                                
print "[" + datetime.datetime.now().strftime(TF0)+"] - "+"send file success"
                                ftp.quit()
                                ftp.close()
                                
break
                        
print "[%s] - failed on check: src size.%d != desc size%d" % (datetime.datetime.now().strftime(TF0),sfile_size,dfile_size)
                        ftp.quit()
                        ftp.close()
                
except Exception, myError:
                        excType, excValue, traceBack 
= sys.exc_info()
                        
print excType
                        
print myError
                        
#print excValue
                        #print traceBack
                time.sleep(SLEEP_TIME)



posted @ 2008-12-11 18:00 刘凯毅 阅读(155) | 评论 (0)编辑 收藏

下载
http://www.blogjava.net/Files/Skynet/turtle.rar
(目前项目什么都没有 ,就是个架子 。有时间会跟新的 ,如果有人想加入,请联系我 liukaiyi@gmail.com)
由于时间粗略 ,写的乱。不过想法很好(安全什么叫别说了,定位就是给自己用的)
刚处理 shell <-> py 乱码问题 ,留文
由于万恶的Windows dos 使用gbk 编码 ,导致我连他的 comm 一定要使用 编码转换
从页面接受到到的命令 :
commCharset="GBK"
sh_comm=sh_comm.encode(commCharset)
运行命令得到的结果
fp=os.popen(sh_comm)
sh_comm_value=unicode(fp.read(), commCharset)



 你想要的学习笔记本 = web + shell + python + 文本  ;

想法是:通过web 使用shell强大的文本处理功能。帮助你整理学习笔记
比如:
一个py 中文处理你刚解决,到页面上 随便输入 你解决的办法,贴个关键字。
下次

findWords.sh(shell 自己定义,当然可以使用web 包装下 ) >>
#/bin/shell
find / -type f -name | grep $1
findWords.sh 中文处理

http://www.blogjava.net/Files/Skynet/turtle.rar

项目说明 :
项目目前使用 windows + cygWin shell
配置好 django
使用 eclipes + ant (pybuild.xml)
上面的运行只是能简单在web中的运行shell和展现运行结果
运行结果

shell 命令
ls -l
总计 96
drwxr-xr-x 4 Administrator None 0 Dec 2 14:11 myTurtle
-rw-r--r-- 1 Administrator None 21 Dec 2 14:34 pybuild.properties
-rw-r--r-- 1 Administrator None 1040 Dec 2 14:16 pybuild.xml
drwxr-xr-x 2 Administrator None 0 Dec 2 17:07 shell
-rw-r--r-- 1 Administrator None 164 Dec 2 16:47 需求
posted @ 2008-12-10 10:36 刘凯毅 阅读(1423) | 评论 (0)编辑 收藏

仅列出标题
共12页: First 上一页 4 5 6 7 8 9 10 11 12 下一页