今天主要学习了下hudson的配置,和ant相结合的操作。

其实很简单,hudson就是一个持续集成的东西,我现在的理解就是自动帮你跑脚本,定时执行,当有代码更新的时候就是自动更新下。

主要步骤就是新建一个job,然后进行配置。

因为要从SVN里取代码,所以需要填写SVN地址:

然后填写svn用户密码

接着在shell窗口里:

输入shell

#!/bin/bash
export JAVA_HOME="/home/debian/soft_wares/jdk1.6.0_25"
export PATH="$PATH:/home/debian/soft_wares/jdk1.6.0_25/bin"
export CLASSPATH="$CLASSPATH:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/*"
echo $CLASSPATH
ant alltests

 主要是JAVA_相关的变量

最后用ant tartget即可

最后保存后,构建JOB即可

注意:今天遇到问题,要选择job运行的机器,因为如果不选择,是随机选一个,可能导致环境变量设置不正确:

 

这里选择跑哪个机器。

posted @ 2012-05-31 19:58 RINA 阅读(1) 评论(0) 编辑

   

  今天学习了一下selenium怎么对付弹出窗口,像webdriver话就是直接可以用selectallwindowsID-selectcurrentID就可得到弹出的窗口,在selenium里面的话,可以用selectWindowID来做。

具体用到了两个方法:

sel.getAllWindowTitles()

sel.selectWindow()

其实就是通过getallWindowsTitles得到这次操作所有打开窗口的title,返回一个list吧,然后list[0]是原来的,list[1]就是新弹出的了

通过sel.selectWindow(sel.getAllWindowTitles()[1])就可以得到了新弹出的窗口,最后操作就可以了。

另外就是小小的学习了下java的list和MAP

初始化一个list,那就是ArrayList<string> a=new ArrayList<>()

这里的话不要初始化ArrayList<string> a=NULL

还是会报空指针的错误。

map初始化就是 Map<Integer, String>Newsmap=new HashMap<>();这里不能用int.因为int只是Integer的一种,另外右边也不可以是new MAP

,其他操作方法都一样。

posted @ 2012-05-18 20:25 RINA 阅读(42) 评论(0) 编辑

import re

第一部分:

出现个数:

1.‘*’前面的匹配串出现0-无穷次

2.‘+’出现1-无穷次

3.‘?’出现0次到1次

4.{m,n}出现m次到n次

5.{m,n}?m到n里面出现的最低次数

比如re.serach('a{2,4}?','aaaa')则是aa

6.'$'表示结尾,以前面的匹配串结尾,注意一般用serach

7.‘^’表示开头

第二部分:

出现类型:

1.‘\w’表示任何字母和数字,\W非数字

2.'\d'只表示数字,\D表示非数字

3.'.'表示任何字符,不包括换行符号

4.'()'表示一个元组,相当与括号里看作一个整体

第三部分:

几个重要的方法:

1.match():从头开始匹配

2.search():任何地方

3.findall()返回一个元组,只针对()的

4.group()返回匹配的结果

5.sub(x,y,string):x要代表被替换的字符,y代表代替x的字符,string只有地方需要替换的字符串

6.subn(),返回替换的个数

7.start(),end(),代表出去匹配字符串之后,字符串剩下部分的头和尾巴

>>> email = "tony@tiremove_thisger.net"

>>> m = re.search("remove_this", email)

>>> email[:m.start()] + email[m.end():]

'tony@tiger.net'

posted @ 2012-05-11 17:01 RINA 阅读(2) 评论(0) 编辑

1.bin():返回一个二进制

bin(x)

2.enumerate(list)

返回一个枚举类型,比如

for i,value in enumerate([‘ok’,’ko’])

     print i ,value

则输出0,ko

        1,ko

 

3.

1.str.title()//把字符串变成标题

>>> "they're bill's friends from the UK".title()

"They'Re Bill'S Friends From The Uk"

2.str.translate(None,XX)//删除掉选定的字符串里的字母

>>> 'read this short text'.translate(None, 'aeiou')//即把aeiou变成了元组

'rd ths shrt txt'

3..format,//这里是输出字典时候可以

>>> print '%(language)s has %(number)03d quote types.' % \

... {"language": "Python", "number": 2}

Python has 002 quote types.

4.sorted

>>> sorted(p.items().key=lambda p:p[1],reverse=True)

对字典p按照vlues来进行排序,返回一个键值和values的list

5.f.readline()和f.readlines()

>>> readline()//读一行,返回一行的字符串,readlines()读整个文件,返回每行,当作一个列表

6.zip(list a,list b)//很好的函数

>>>a=['1','2'],b=['3','4']//如何把更快的把a,b合并成为一个字典呢

用zip

c={}

for x,y in zip(a,b)://就可以一一对应了

c[x]=y

7.odd()//用于判断一个数字是奇数还是偶数,奇数返回1,偶数返回0,能简单就简单吧

8.如何快速找出一个文件的最大行数呢?

很简单:

max(len(x.strip()) for x in open(filename))

9.round(x,n)//四舍五入到小数点后几位

round(3.6,1)=3.6 round(3.6)=4

10.str.decode('utf-8').把其他编码格式的字符串转为unicode

str.encode('utf-8')把unicode格式的字符串编码成utf-8形式。

Decode和encode中间是以unicode为媒介的,所以转码前弄清出str编码

11.# -*- coding: utf-8 -*- 最好在每个py文件前加上这个,先默认编码格式为utf-8方便转

12.str.find(x,from,to)

在字符串里找出字符X,from和to表示从起始末尾位置,如果找不到,则返回-1,记住,-1不是元素位置

13.

posted @ 2012-05-11 17:01 RINA 阅读(4) 评论(0) 编辑

1.取当前脚本所在路径

os.path.realpath(__file__).lstrip(sys.argv[0])

posted @ 2012-05-11 16:22 RINA 阅读(1) 评论(0) 编辑

再总计下python-logging模块

#-*-coding:utf-8-*-
import logging
import logging.handlers
import time

try:
    logger1 = logging.getLogger()#实例
    logger2 = logging.getLogger()
    logger1.setLevel(logging.DEBUG)#定义BUG级别
    format = logging.Formatter('%(asctime)s-%(name)s-%(message)s',datefmt=time.strftime('%Y%m%d'))#格式
    fh=logging.FileHandler('D:\\doc\\hello.log')#文件句柄
    fh.setLevel(logging.DEBUG)
    fh.setFormatter(format)
    logger1.addHandler(fh)#添加文件句柄
    logger1.debug('hello')
    ch=logging.FileHandler('D:\\doc\\he.log')
    ch.setLevel(logging.INFO)
    ch.setFormatter(format)
    logger2.addHandler(ch)
    logger2.info('hello11')
except Exception ,e:
        print e

另外一个python操作excel:

简单的说,就是

读取一张表格->读取具体的一张表单->读取行列数据

#-*-coding:UTF-8-*-
import xlrd
from urllib2 import urlopen

excel=xlrd.open_workbook('d:\\doc\\quanshang.xls')//读取一个excel
sheet=excel.sheet_by_index(0)//读取某一张表单
url_columu=sheet.col_values(3)//读取某一列,返回一个list
md5_columu=sheet.col_values(4)
i=j=0
for num in range(1,len(url_columu)):
    text=urlopen(url_columu[num].encode("utf-8")).read()
    if text.find(md5_columu[num].encode("utf-8"))!= -1:
        print 'find'
        i=i+1
    else:
        print 'sorry',num+1
        j=j+1
print i

获取每一行的信息

#打印每行的信息 
for rownum in range(sheet.nrows):
#每一行的信息 
print  sheet.row_values(rownum) #列表

最后根据索引来确定:

cell_A1 = sheet.cell(0,0).value

X是row,Y是col

posted @ 2012-05-02 19:35 RINA 阅读(4) 评论(0) 编辑

按照接受双方对象分为服务端和客户端。

服务端主要用到了几个步骤:

1.初始化一个套接字:

socket()://两个参数,一个AF_INET:socketfamily,另外一个是SOCK_STREAM表示用tcp连接

2.bind(addr),绑定一个地址,这里的addr是一个map,有HOST和PORT两个参数

3.listen()://监听请求,参数表示最多能监听几个请求

4.accept://接受套接字,返回客户端的一个套接字对象和地址,然后通过这个返回对象进行操作,包括对消息的反馈等等

5.close():关闭套接字资源,包括关闭接受的客户端套接字对象和服务端套接字对象

 def serv(HOST='',PORT=25111):
  6     Addr=(HOST,PORT)
  7     tcpser=socket(AF_INET,SOCK_STREAM)
  8     try:
  9         tcpser.bind(Addr)
 10         tcpser.listen(5)
 11     except Exception,e:
 12         print 'sorry,faild',e
 13     while True:
 14         print 'waiting for connection...'
 15         tcpcli,addr=tcpser.accept()
 16         print 'connection from ... ',addr
 17         while True:
 18             data=tcpcli.recv(BUFSIZ)
 19             if not data:
 20                 break
 21             tcpcli.send(('[%s],%s')%(ctime(),data))
 22             tcpcli.close()

客户端:

1.同样初始化一个套接字:

2.建立和服务端的连接:可以有connect()和create_connection()两个函数,有两个参数:第一个地址addr,另外一个就是timeout

3.send(data)发送一个套接字数据

4.recv()接受一个套接字数据。参数可以是接受数据量大小

5.close()

import socket
HOST='localhost'
PORT=21568
BUFSIZ=1024
ADDR=(HOST,PORT)
tcpclisock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpclisock.connect(ADDR)

while True:
    data=raw_input('>')
    if not data:
        break
    tcpclisock.send(data)
    data=tcpclisock.recv(BUFSIZ)
    if not data:
        break
    print data
tcpclisock.close()

PS:

暂时就学了这么一点,另外几个点:服务端的套接字没有recv(data),所以想接受和发送数据就通过accept()返回的套接字对象来进行操作即可

posted @ 2012-04-24 11:26 RINA 阅读(10) 评论(0) 编辑
摘要: 今天学习了一下linux下面JDK和tomcat的配置,这里的linux发行版为ubuntu11.0,JDK为1.7,tomcat为7.0记录一下遇到的主要问题:第一个.JDK环境变量的设置:首先在/etc/evvironment下环境变量只对当前登录的用户有效,比如我是lhb,用root去看java的话,会提示找不到环境变量在/etc/environment下环境变量配置只需要在PATH下面添加/path/bin,然后CALSSPATH就是lib的地址,最后JAVA_home地址即为/path第二个问题,tomcat启动时候用当前用户提示没有权限,主要没有改变startup.sh的权限,而当阅读全文
posted @ 2012-03-30 17:35 RINA 阅读(14) 评论(0) 编辑
摘要: 参考来源: http://blog.zol.com.cn/1067/article_1066186.html,http://flandycheng.blog.51cto.com/855176/280121 语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对ur...阅读全文
posted @ 2012-03-29 15:54 RINA 阅读(15) 评论(0) 编辑
摘要: 主模块{ #user nobody;// worker_processes 1; //几个工作进程 #worker_rlimit_core 1000KB //允许的每个程序的核心文件最大值 #worker_rlimit_nofile 102400//每个进程能够打开的最多文件描述符 #worker_cpu_affinity 001//仅用于linux下面,用来分配每个进程对...阅读全文
posted @ 2012-03-29 15:04 RINA 阅读(14) 评论(0) 编辑