月度归档:2011年12月

怎样看到python中已经安装多少模块?

由于正在学习,就不可避免的学到python中怎样安装模块,比如用easy_install安装就很方便,但是该命令只管安装和删除,却不管列出当前已经安装哪些模块,让用惯pkg_info 的我很不适宜。于是到处寻找答案,终于找到解决方案,就是在python环境中输入:

help(‘modules’) 就能列出所有已经安装的模块了。

我确认了一下,嗯,安装的bottle、web、plone、pyramid、pylons、django等都在,看来真的管用。

 

用python读取大sql文件

从网上下了一个数据库文件,解开是一个273M的文件,文件名:xxx.sql ,修改日期2011.10.16日。基于我以前的经验,没有用记事本打开,而是用word打开,结果word就卡在那里……于是上网上搜索,下了一个据说可以打开.sql文件的程序,但是打开过程中报内存不足。怒了,咱还是手工用python来出马吧!

 

先编了这样一个小程序

inputfile=open(‘E:QQDownloadxxx.sql’)
for s in inputfile:
if  ‘abcxxx@163.com’  in s :
print(s)

inputfile.close

这个小程序就是打开那个文件,一行一行的读,并且发现有匹配的邮箱就在屏幕打印出来。这样如果自己的邮箱在这个数据库中,就能显示出来。不用用户名的原因是,用户名重复的太多,滚屏太快。我心算了一下,程序运行一次大约耗时8秒,这在可接受范围内。

 

下一步就是优化程序,可以交互。代码如下:

 

inputfile=open(‘E:QQDownloadxxx.sql’)
while True:
  key1=raw_input(“press what you want find  “)
  print ‘now searching for ‘,key1
  key1=str(key1)
  if key1:
    for s in inputfile:
      if key1 in s :
        print(s)
  else:
    break
  inputfile.seek(0)
inputfile.close

python入门之安装篇

前面有讲过,看了好长时间的python,还是一团浆糊,现在总算开始理出一点头绪了。

 

python本身的安装就不说了,关键是那些包、框架等的安装,真的让我很头疼,偏偏我已经被FreeBSD里的ports那简单的操作(先whereis一下,然后要么到ports下make install,要么直接pkg_add -r xxx)给养成习惯了,十分不情缘去一个一个到网站去下软件,然后再用各自的安装方法……天哪。现在我知道了,python下有setuptools这个工具,里面包括了easyinstall,而easyinstall我感觉就跟ports差不多了,很熟悉的感觉。

在freebsd的ports中,有py26-setuptools包以及py-setuptools包。我pkg_add -r py-setuptools ,说没有找到相关文件。于是到ports下make install,发现安装的就是py26-setuptools。也就是刚开始直接pkg_add -r py26-setuptools 就可以了。但是我不知道装到哪里去了? 发现用户当前目录有个ez_setup.py文件,但是忘记这个文件是否是我自己以前下的了。没事,我还有locate这个命令。发现easy_install 被装在/usr/local/bin 目录下了。

 

easy_install 的使用方法:

a、安装模块

easy_install package-name(比如 easy_install pylab)

b、模块卸载

easy_install -m package-name (比如easy_install -m pylab)

easy_install -m 包名,可以卸载软件包,但是卸载后还要手动删除遗留文件。(看的帮助,里面讲要先easy_install -mxN ,让python不再去查找相关模块,然后就可以安全的手工删除了。)
尝试着装pylons:
easy_install pylons  然后系统就忙活起来了。

还看到virtual-python.py,它也是setuptools中的,不过我只在ports里看到它了,并没有在外面看到,当然去下载它也是很方便的:

 wget http://peak.telecommunity.com/dist/virtual-python.py
执行一下它,就能自动的建立一个虚拟的python环境。不过我在bluehost里是直接在安装的时候带-prefix参数自己搞定的。(prefix of $HOME/.local)

总结一下,在FreeBSD下安装python以及相关模块、框架就是如此简单:
1 在ports下安装python以及setuptools
2 使用easy_install 安装所有的python模块和框架
今天就先到这里吧。
 相关链接:
http://peak.telecommunity.com/DevCenter/setuptools setuptools文档
http://peak.telecommunity.com/DevCenter/EasyInstall easyinstall文档
http://gooss.org/python-in-easy_install/ python easy_install案例

 

 

 

python 入门之安装篇

前面有讲过,看了好长时间的python,还是一团浆糊,现在总算开始理出一点头绪了。

 

python本身的安装就不说了,关键是那些包、框架等的安装,真的让我很头疼,偏偏我已经被FreeBSD里的ports那简单的操作(先whereis一下,然后要么到ports下make install,要么直接pkg_add -r xxx)给养成习惯了,十分不情缘去一个一个到网站去下软件,然后再用各自的安装方法……天哪。现在我知道了,python下有setuptools这个工具,里面包括了easyinstall,而easyinstall我感觉就跟ports差不多了,很熟悉的感觉。

在freebsd的ports中,有py26-setuptools包以及py-setuptools包。我pkg_add -r py-setuptools ,说没有找到相关文件。于是到ports下make install,发现安装的就是py26-setuptools。也就是刚开始直接pkg_add -r py26-setuptools 就可以了。但是我不知道装到哪里去了? 发现用户当前目录有个ez_setup.py文件,但是忘记这个文件是否是我自己以前下的了。没事,我还有locate这个命令。发现easy_install 被装在/usr/local/bin 目录下了。

 

easy_install 的使用方法:

a、安装模块

easy_install package-name(比如 easy_install pylab)

b、模块卸载

easy_install -m package-name (比如easy_install -m pylab)

easy_install -m 包名,可以卸载软件包,但是卸载后还要手动删除遗留文件。(看的帮助,里面讲要先easy_install -mxN ,让python不再去查找相关模块,然后就可以安全的手工删除了。)
尝试着装pylons:
easy_install pylons  然后系统就忙活起来了。

还看到virtual-python.py,它也是setuptools中的,不过我只在ports里看到它了,并没有在外面看到,当然去下载它也是很方便的:

 wget http://peak.telecommunity.com/dist/virtual-python.py
执行一下它,就能自动的建立一个虚拟的python环境。不过我在bluehost里是直接在安装的时候带-prefix参数自己搞定的。(prefix of $HOME/.local)

总结一下,在FreeBSD下安装python以及相关模块、框架就是如此简单:
1 在ports下安装python以及setuptools
2 使用easy_install 安装所有的python模块和框架
今天就先到这里吧。
 相关链接:
http://peak.telecommunity.com/DevCenter/setuptools setuptools文档
http://peak.telecommunity.com/DevCenter/EasyInstall easyinstall文档
http://gooss.org/python-in-easy_install/ python easy_install案例

 

 

 

一团浆糊的python学习

首先收藏几个网址:

http://markmail.org 很好的一个emai搜索网站l

学了好久python的web编程了,还是一团浆糊。前几天看fastcgi,怎么感觉python连apache都要跳过去了? 这让我这个老apache粉实在有点无所适从。看了好久的web.py,但是它竟然还不支持python3.0,更不要说它网站里中文页面就因为index.zh-cn 写成index/zh-cn而无法浏览的问题了。
     于是转而去看pylons……
到底在一个虚拟主机中如何去安装、设置pylons呢?还是一定要用vps才行,唉,慢慢探索吧。

web.py提供XML访问

    这是官方文档关于web.py提供XML访问的问题解决。之所以写下来,是因为以前没有做过,今天有人说自己按照它报错,于是我就比着整了下。我的理解是,下面的文档省略了一些东西:模版templates目录中,是根据render.xxx来匹配模版文件的,只能匹配html和xml两种格式。两个都在的话html优先。所以下面的文档中,xml建议写response.xml,而代码中写的是return render.index(code),肯定不行的。要么写成index.xml,要么改成 return render.response(code)。
问题
如何在web.py中提供XML访问?
如果需要为第三方应用收发数据,那么提供xml访问是很有必要的。
解法
根据要访问的xml文件(如response.xml)创建一个XML模板。如果XML中有变量,就使用相应的模板标签进行替换。下面是一个例子:
$def with (code)
<?xml version=”1.0″?>
<RequestNotification-Response>
<Status>$code</Status>
</RequestNotification-Response>
为了提供这个XML,需要创建一个单独的web.py程序(如response.py),它要包含下面的代码。注意:要用”web.header(‘Content-Type’, ‘text/xml’)”来告知客户端--正在发送的是一个XML文件。
import web
render = web.template.render(‘templates/’, cache=False)
urls = (
    ‘/(.*)’, ‘index’
)
app = web.application(urls, globals())
class index:
    def GET(self, code):
        web.header(‘Content-Type’, ‘text/xml’)
        return render.index(code)
web.webapi.internalerror = web.debugerror
if __name__ == ‘__main__': app.run()

web.py 提供XML访问

    这是官方文档关于web.py提供XML访问的问题解决。之所以写下来,是因为以前没有做过,今天有人说自己按照它报错,于是我就比着整了下。我的理解是,下面的文档省略了一些东西:模版templates目录中,是根据render.xxx来匹配模版文件的,只能匹配html和xml两种格式。两个都在的话html优先。所以下面的文档中,xml建议写response.xml,而代码中写的是return render.index(code),肯定不行的。要么写成index.xml,要么改成 return render.response(code)。
问题
如何在web.py中提供XML访问?
如果需要为第三方应用收发数据,那么提供xml访问是很有必要的。
解法
根据要访问的xml文件(如response.xml)创建一个XML模板。如果XML中有变量,就使用相应的模板标签进行替换。下面是一个例子:
$def with (code)
<?xml version=”1.0″?>
<RequestNotification-Response>
<Status>$code</Status>
</RequestNotification-Response>
为了提供这个XML,需要创建一个单独的web.py程序(如response.py),它要包含下面的代码。注意:要用”web.header(‘Content-Type’, ‘text/xml’)”来告知客户端--正在发送的是一个XML文件。
import web
render = web.template.render(‘templates/’, cache=False)
urls = (
    ‘/(.*)’, ‘index’
)
app = web.application(urls, globals())
class index:
    def GET(self, code):
        web.header(‘Content-Type’, ‘text/xml’)
        return render.index(code)
web.webapi.internalerror = web.debugerror
if __name__ == ‘__main__': app.run()

python wsgiref初体验

由于我对网站www服务器的理解还停留在10多年前的cgi,所以对python里面提到的wsgi(也就是所谓python web server gateway interface,python服务器网关接口)一直无法理解。今天看python参考手册(第四版),里面有个实例。通过实例操作,总算对wsgi有个一点感官的理解。

wsgiref包为实现wsgi提供了一个参考,它可以在独立的服务器测试应用程序,也可以将应用程序做为普通的cgi脚本执行。

一个简单的wsgi服务器示例:

def my_app (environ,start_response):
    start_response(‘200 ok’,[(‘content-type’,’text/plain’)])
    return [‘hello world 80′]
if __name__==’__main__':
    from wsgiref.simple_server import make_server
    serv=make_server(”,80,my_app)
    serv.serve_forever()
 这里我把测试中的8080端口改为了80端口。
以传统CGI脚本形式运行的示例:
def my_app (environ,start_response):
    start_response(‘200 ok’,[(‘content-type’,’text/plain’)])
    return [‘hello world’]
if __name__==’__main__':
    from wsgiref.handlers import CGIHandler
    hand=CGIHandler()
    hand.run(my_app)
输出结果是:

>>>
Status: 200 ok
content-type: text/plain
Content-Length: 11

hello world
>>>

python wsgiref 初体验

由于我对网站www服务器的理解还停留在10多年前的cgi,所以对python里面提到的wsgi(也就是所谓python web server gateway interface,python服务器网关接口)一直无法理解。今天看python参考手册(第四版),里面有个实例。通过实例操作,总算对wsgi有个一点感官的理解。

wsgiref包为实现wsgi提供了一个参考,它可以在独立的服务器测试应用程序,也可以将应用程序做为普通的cgi脚本执行。

一个简单的wsgi服务器示例:

def my_app (environ,start_response):
    start_response(‘200 ok’,[(‘content-type’,’text/plain’)])
    return [‘hello world 80′]
if __name__==’__main__':
    from wsgiref.simple_server import make_server
    serv=make_server(”,80,my_app)
    serv.serve_forever()
 这里我把测试中的8080端口改为了80端口。
以传统CGI脚本形式运行的示例:
def my_app (environ,start_response):
    start_response(‘200 ok’,[(‘content-type’,’text/plain’)])
    return [‘hello world’]
if __name__==’__main__':
    from wsgiref.handlers import CGIHandler
    hand=CGIHandler()
    hand.run(my_app)
输出结果是:

>>>
Status: 200 ok
content-type: text/plain
Content-Length: 11

hello world
>>>

cacti监控流量1000M不准确的问题 zt

今天有朋友讲到cacti在FreeBSD下统计不准确的问题,它的1000M网卡,统计出来流量是224MB,这样算起来要1600Mb了,显然不正常。

后来从网上查了一下,看来不是FreeBSD下特有的问题,问题以及解决方法如下:

原文:http://www.egocbd.com/Cisco/1324/511.shtml

cacti监控网络边界流量的问题,当流量超过100M时不准确,网上查了很多资料都说是不支持64位采集或者net-snmp版本过低的问题,但经过测试我的情况不属于上述两者。

后发现cacti 的官方论坛里有这样的回复:

the problem is that a 32 bit snmp counter overflows between the 5 min polling intevals that is used by default.

you have two options:
* use 64 bit snmp counters if your device supports it (probably needs snmp v2 or above)
* use shorter polling interval, for example 1 minute, but note that you need to change more than just the polling interval (graph, rra and so on)

i’m using 1min polling intervals for 32bit counters on 1 gbit interfaces and a different graph+datasource setup, and this works fine.
it also gives better precition for the last couple of ours (1min intervals instead of 5min).

check the forums, there should be some info about this.

原来,把cacit的poller时间改成1分钟,可以解决这个问题,于是:

1.将cacti的poller设置中Poller Interval和Cron Interval两项改为Every Minute

2.安装spine,并将cacti的poller类型修改为spine(原来为cmd.php)

3.修改/etc/cron.d/cacti 计划任务文件:*/1 * * * *     cacti   php /var/www/cacti/poller.php &>/dev/null(原来为5分钟)

重新添加设备,监控流量正常。如果原来已经有设备和图形,则须将cacti/rra目录下的rrd文件删除让系统重新生成文件。