使用utf-8和nohup的python打印语句

17 投票
1 回答
4890 浏览
提问于 2025-04-16 15:31

我有一些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

撰写回答