17

我有一些打印日志消息的 python 代码。在命令行运行时,它可以使用 utf-8。包含特殊字符的日志消息打印良好。但是,当在 nohup 下在后台运行时,它会输出 utf-8 字符。

nohup python2.7 myProgram.py &

我看到的错误是通常的“尝试在 ascii 中编码 utf”错误:

UnicodeEncodeError:'ascii' 编解码器无法在位置 71 编码字符 u'\u2013':序数不在范围内(128)

我认为这是因为 nohup 向 python 发出信号,表明它没有正常的终端,所以它默认为 ascii。有没有办法告诉 nohup 在启用 utf-8 的情况下运行,或者设置它以便在后台在 nohup 下运行时 utf-8 字符不会导致崩溃?

4

1 回答 1

23

使用PYTHONIOENCODING

export PYTHONIOENCODING=utf-8
nohup python2.7 myProgram.py &

例如,如果

我的程序.py

unicode_obj=u'\N{INFINITY}'
print(unicode_obj)    

然后运行

nohup python2.7 myProgram.py > /tmp/test &

生产

/tmp/测试

UnicodeEncodeError: 'ascii' codec can't encode character u'\u221e' in position 0: ordinal not in range(128)

尽管

export PYTHONIOENCODING=utf-8
nohup python2.7 myProgram.py > /tmp/test &

生产

/tmp/测试

于 2011-04-11T20:22:12.847 回答