专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Perl/Python

手工执行python3程序没有关问题,放在cron里面就不执行有中文的代码,高手帮忙啊

发布时间:2011-06-29 20:11:48 文章来源:www.iduyao.cn 采编人员:星星草
手工执行python3程序没问题,放在cron里面就不执行有中文的代码,高手帮忙啊。急!
先介绍下基本情况

环境: redhat Python3.2
目的:定时执行python程序
问题:手工执行python程序没有问题,放到crontab列表里面执行的时候,遇到中文就抛异常

python程序源码
Python code
#!/usr/local/bin/python3
#coding=gbk

import io, sys, time, re, os

def main():
    try:
        print("a")
        print("中")
        print("b")
    except Exception as e:
        print("Exception: " + str(e))

if __name__ == '__main__':
    main()


手工执行结果:
Perl code
[kkk@vs ~]$ python3 /home/kkk/9/app/tw/tw3.py
a
中
b


放到cron里面
Perl code
[kkk@vs ~]$ crontab -l
*/1 * * * *     /usr/local/bin/python3 /home/kkk/9/app/tw/tw3.py             > cronlog5

查看日志,只有a被打印了
Perl code
[kkk@vs ~]$ more cronlog5
a
Exception: 'ascii' codec can't encode character '\u4e2d' in position 0: ordinal not in range(128)


已经尝试过网上使用的添加sitecustomize.py文件方法,不起作用

也试过
Python code
import sys 
reload(sys)
sys.setdefaultencoding('utf8')

结果sys.setdefaultencoding('utf8')后面的代码就不执行了,日志里面只有这条语句前面的打印记录

查看python3默认编码,发现已经是utf-8,也许是上面两种方法不再有效的原因
另外系统里面还有python2,不过我想跟这个也许没什么关系,之前被我执行过sys.setdefaultencoding('utf8') ,现在默认编码也是utf-8了

Perl code
[kkk@vs ~]$ python
Python 2.4.3 (#1, Sep 21 2011, 20:06:00) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding() 
'utf-8'
>>> 


被这个问题折腾一天了,请大虾们帮我看看。


------解决方案--------------------
你在shell里看不管用,因为你手动执行没错。你在cron的task里把encoding打出来看下。可能是执行这个task的环境(或者用户)的默认编码不是utf-8的。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: