在CRON作业中运行时Python脚本编码出现问题

时间:2012-08-07 00:25:13

标签: python utf-8 cron

正如许多人所希望的那样,这种编码问题正在推动我 mental 。我真的很感激这一点!

最终目标是能够从终端和cron运行相同的script.py,并从cron运行> stdout.txt。不用说,我有严重的编码问题。

我的script.py从终端运行良好:python script.py
但是,从终端运行时会抛出错误:python script.py > stdout.txt
无论哪种方式,在cron中运行都会引发相同的错误。

我有一个python脚本,以root身份crontab -e输入。

这是我的script.py标题:

#!/usr/bin/python
# -*- coding: utf-8 -*-

这是我的cron条目:

* * * * * python /home/ubuntu/parrot/script.py > /home/ubuntu/parrot/stdout.txt

这是我的stdout.txt(相关部分):

Unexpected error!  (<type 'exceptions.UnicodeDecodeError'>, UnicodeDecodeError('ascii', 'blabla some weird text n\xc3\xa5r end', 54, 55, 'ordinal not in range(128)')) 

这是我的终端环境(相关部分):

LANG=en_US.UTF-8

这是我从cron(相关部分)的环境:

LANG=en_US.UTF-8

这是script.py中抛出错误的第一行:

print 'Posting @%s: %s' % (statusObj.user.screen_name.encode('ascii', 'replace'), statusObj.text.encode('utf-8', 'replace'))

编辑: sys.getdefaultencoding()返回ascii

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

如果您可以控制statusObj,则应检查将数据解析到对象中的相关代码,并尽可能将输入作为 clean

在尝试编码之前,您需要确保将字符串解码为unicode。

如果没有,你可以尝试:

# try to get the string into unicode
screen_name = unicode(statusObj.user.screen_name) 
post = unicode(statusObj.text) # probably an error here?
output_str = u"Posting @{name}: {post}".format(name=screen_name, post=post)
print output_str.encode("utf8", "replace") # encode the unicode string on