标签归档:python

RSS feed of python

最后更新于 .

因为下周要用php写项目,所以周末在家里重新看php的语法,看到三元描述符,突然想起来python是没有三元描述符的,印象中依稀记得有模拟的实现,于是上网上搜了一下。
(对应C语言的 X ? V1:V2)
找到一篇文章:http://blog.csdn.net/xiaoyin992/archive/2008/12/29/3635015.aspx
其中一种是:

(X and V1) or V2

正常情况下是不会有错误的,但是文章中也提到了,当V1=""时,就会有问题
比如

print (True and '') or 'V'
print (False and '') or 'V'

输出永远都是: V

完美的解决方案是在《python核心编程中提到的》:

V1 if X else V2

原文如下:

如果你来自 ...

最后更新于 .

最近因为python升级到了2.7导致mod_python不能用,所以自己电脑上的apache一直启动不起来,趁着周末有时间,抓紧搞一下。 在网上搜了一下,发现mod_python已经停止维护了,而替代他的是mod_wsgi,下载路径如下: http://code.google.com/p/modwsgi/downloads/list 挑选For 2.7的版本下载,改名成mod_wsgi.so,然后扔到apache的modules目录就可以了。 在apache的conf文件中加入:

LoadModule wsgi_module modules/mod_wsgi.so

OK,但是我们真正的安装才刚刚开始。 刚才说过由于python升级到2.7,之前所有的库都删掉了,所以不得不重新安装,需要准备好如下库。

最后更新于 .

记得刚入职的时候,那时候什么都不懂,组长让我跑个迁移程序,还没跑完就关终端走人了,结果可想而知,那是第一次知道守护进程的概念。
当时后来是加了nohup参数解决的,

nohup ./program &


但是总是强迫别人用nohup来启动自己的程序毕竟不是办法,所以还是要把自己的进程变成守护进程才行。

C/C++的版本就不说了,这里有篇文章写的很清楚。
http://colding.bokee.com/5277082.html

这里主要介绍一下在网上无意发现的一个国外哥们的写的python版本:
http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
顺便吐个槽,这哥们用的Vim配色明显是Wombat~~
代码如下(对私有函数名加了_前缀,便于理解,并加了一定的注释):

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os, time, atexit
from signal import SIGTERM
class Daemon:
    """
    A generic ...

最后更新于 .

很久没上vim官网,今天上去一看Vim7.3居然发布啦,看日期是8月16日发布的,看来还是晚了两天呀~~
马上下载下来尝鲜啦,担心有些朋友找不到,故放出下载链接如下:

ftp://ftp.vim.org/pub/vim/pc/gvim73.exe

界面没什么变化(都是自己配的色,肯定没变化嘛。。),看一下这个默认的编译支持如何:

1

看到了吗,看到了吗,Vim居然默认将python语言支持编译进去了,而且最兴奋的居然还支持python3!
不过兴奋之余,我发现了一个很严重的问题。。。那就是我的pyflakes和qiushibaike.vim都不能用了。。。Vim7.3默认要求的python版本居然是2.7,太潮了吧!
好吧,卸掉我心爱的python 2.6,去下载个python 2.7,结果再次感慨到gfw的伟大,官网的download页面居然被和谐了。。所幸找到ftp的下载地址:

http://www.python.org/ftp/python/2.7/python-2.7.msi

如果直接在浏览器下载不了 ...

最后更新于 .

这篇文章的东西可能比较杂,因为每个特性都不那么大,所以就揉在一起,倒是显得庞大了许多。

一.svn命令行在windows下面的安装使用
一直以来都使用svn管理源码,但是在windows下一直使用TortoiseSVN的界面进行管理,但是对于我这种键盘控(vim后遗症)来说,简直是无法忍受的!
搜啊搜啊搜啊,终于发现了-----CollabNetSubversion
下载页面:http://www.collab.net/downloads/subversion/
如果象我一样只需要命令行的话,下载CollabNet Subversion Command-Line Client v1.6.12 (for Windows)即可,网站需要先注册一下。
基本上安装完了,svn up、svn add就可以用了,但是svn ci的时候,你会发现如下提示:

svn: Commit failed (details follow):
svn: Could not use external editor to fetch log ...

最后更新于 .

最近被公司的事情搞的很纠结,博客也有段时间没写了,不过最近还是忙里偷闲做了点其他事情,在这里记录下来,和大家分享一下。

需求也比较简单,老婆是做社区运营的,所以需要每天把几个帖子定时的顶上来,手工做很累,所以就想让我用程序实现。

分析一下,其实无非是先用户名和密码登录,获取到cookie后,再带着cookie去访问要顶贴的页面即可,至于剖析页面来获取url就是BeautifulSoup要做的事情了。(论坛是discuz做的,这里只为演示方法)

登录代码实现如下:

def Login(user,pwd): 
    loginpage = urllib.urlopen('http://bbs.xxx.com/logging.php?action=login').read() 
    login_soup = BeautifulSoup(loginpage) 
    formhash_tag = login_soup.find('input',attrs={'name':'formhash'}) 
    formhash = formhash_tag['value'] 
     
    params = { 
            "answer":"", 
            "formhash":formhash, 
            "loginfield":"username", 
            "loginsubmit" ...

最后更新于 .

公司最近的网络限制越来越严格了,除了公司自己业务的任何网站,软件,都必须通过代理访问。
于是我华丽的发现google code更新不了代码了,等了两天,实在受不了找企业IT部,发现svn是可以配置代理的,如图:

1

试了一下svn up,可以用啦,不错不错,大快~,结果再试了一下svn ci,于是又杯具了……

唉,估计是代理对https的协议支持不好,罢了罢了,翻过一墙还是一墙,那我就只更新吧。

但是事情并没有结束,我有时候需要写程序去抓取外网的网页数据:

import urllib
url = 'https://www.vimer.cn'
data = urllib.urlopen(url).read()

简洁的python,但是用不了……

换urllib2,加代理:

import urllib,urllib2
url   = 'http://www.vimer.cn/'
proxy = 'xxx.xxxx.com:8080'
opener ...

最后更新于 .

怎么说呢,python可以算是救了我一命的一门语言,若不是他,恐怕公司的这个项目还遥遥无期,我会始终保有对他最崇高的敬意。 这里,我仅列出自己最近使用的几个库,并简单演示一下其高超的使用效率。 1.jinja2 简介:一个模板替换类,衍生于django的Template,在很多地方做了加强。 中文支持:模板文件的内容以及render传入的数据,如果含有多字节编码,则必须要先进行decode,渲染之后的结果也是经过decode的。 备注:jinja2在renderXML等格式的文件的时候,不会自动替换html标签,这点有时候是好事~~,因为我并不用jinjia直接来往前台吐页面。 使用: 使用方法很简单:

from jinja2 import Template
template = Template('Hello {{ name }}!')
print template.render(name='World')

也支持不定函数变量的传递:

from jinja2 import Template
template = Template('''
    {{ name }}!
    {%if test0 > 8%}{{test1}} is larger ! {%endif ...

最后更新于 .

最近对django真是大爱呀,哈哈。公司有个需求是为一些素材动态生成属性字段,所以需要django来动态生成表单。

一开始的写法如下:

class AddObjForm(forms.Form):
    id = forms.CharField()
    def __init__(self, *args, **kwargs):
        mdfields = copy.deepcopy(kwargs['mdfields'])
        del kwargs['mdfields']
        super(AddObjForm, self).__init__(*args, **kwargs)
        if mdfields is not None:
            for f in mdfields:
                exestr = ""
                if f.showtype == 0:
                    exestr = 'self.'+f.name+"=forms.CharField()"
                else:
                    exestr = 'self.'+f ...

最后更新于 .

最近在使用django的过程中,发现之前对中文编码的理解并不怎么正确,在此记录一下。

1.在所有需要显式使用中文的地方加上#-*- coding: UTF-8 -*-标识,(包括注释中的中文和代码中字符串的中文)
2.django在db中存储的数据是经过encode的,但是通过模型取出的数据,是经过decode的。
3.python中在进行字符串连接的时候,必须保证所有的子字符串编码或者未编码一致

OK,先从最简单的赋值开始。如下代码:

#!/usr/bin/python
#-*- coding: UTF-8 -*-
import logging
logging.basicConfig(level=logging.DEBUG,
        format='%(asctime)s %(levelname)s %(message)s',
        filename='log.txt',
        filemode='a+')
x = '我爱你'
logging.info(x)
print x

输出是:

我爱你

log.txt中的结果是:

2010-06-25 ...