使用utf-8和nohup的python打印语句
我有一些Python代码用来打印日志信息。在命令行运行时,它处理UTF-8编码得很好,包含特殊字符的日志信息也能正常打印出来。但是,当我在后台用nohup运行时,它就对UTF-8字符出现问题了。
nohup python2.7 myProgram.py &
我看到的错误是常见的“尝试用ascii编码UTF-8”的错误:
UnicodeEncodeError: 'ascii' codec 无法编码字符 u'\u2013' 在 位置 71: 序号不在范围(128)内
我猜这是因为nohup告诉Python它没有一个正常的终端,所以它默认使用ascii编码。有没有办法告诉nohup启用UTF-8,或者设置一下,让UTF-8字符在后台用nohup运行时不会导致崩溃呢?
1 个回答
23
使用 PYTHONIOENCODING 环境变量:
export PYTHONIOENCODING=utf-8
nohup python2.7 myProgram.py &
举个例子,如果你的文件是
myProgram.py:
unicode_obj=u'\N{INFINITY}'
print(unicode_obj)
那么运行下面的命令
nohup python2.7 myProgram.py > /tmp/test &
/tmp/test:
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/test:
∞