Python MOTD 脚本不适用于度数符号 °

Python MOTD 脚本不适用于度数符号 °

我正在使用 python 脚本在 Ubuntu Server 18.04 中创建 MOTD。我在尝试显示硬盘温度时发现了这个问题。我想使用度数符号来显示温度##°C,但是当我登录到服务器时,输出不会显示。删除度数符号解决了问题。

示例代码

#!/usr/bin/python3

print(u"\u00B0" + "C")
print("°C")
print('°' + "C")
print('\u00B0' + "C")

文件保存为00-testpython,并从命令行运行脚本按预期输出:

$ ./00-testpython 
°C
°C
°C
°C

运行脚本会run-parts返回预期的响应:

$ run-parts --lsbsysinit /etc/update-motd.d
°C
°C
°C
°C

使用 ssh 登录会显示旧版本中的内容/run/motd.dynamic,并且不会按照预期的 MOTD 进行更新。

我有一种强烈的感觉,这与编码有关,但我不确定它是什么。从python打印可以使用ANSI转义字符进行彩色打印;我不确定为什么这会引起问题。

使用 bash 脚本来回显度数符号效果很好:

#!/bin/sh

echo °

答案1

正如我怀疑的那样,结果是一个编码问题。我在 MOTD 中发现了一个与编码类似的问题,这里有我需要的答案: https://serverfault.com/a/207357LANG当我从登录的控制台 运行命令检查环境变量时,我得到了值:

$ echo $LANG
C.UTF-8

但是,如果我将相同的命令放入 MOTD (bash) 脚本中,则LANG在登录时该命令为空。我认为在这种情况下默认值将是 ASCII,这在编码度数符号时会导致问题。

为了解决这个问题,我只需要在我的脚本中添加以下行:

export LANG="C.UTF-8"

我将这一行放入 bash 脚本中,然后该脚本调用我的 python 脚本。我无法使用以下命令让它在 python 脚本中工作os.environ['LANG'] = "C.UTF-8"

相关内容