我有一个小的python3测试程序(名为: testing )在Raspberry Pi上以root身份运行,打印三个ascii字符(abc)和三个Latin-1源代码瑞典字符(åäö):
#!/usr/bin/env python3
# -*- coding: Latin-1 -*-
print('abc')
print('åäö')
在具有远程字符集= UTF-8的Putty SSH终端中运行此功能没有问题。 终端上显示的输出为:
abc
åäö
使用相同的python3程序从root下的同一个Putty会话运行分离的 screen 命令也没问题:
screen -dm -U -L -S testing /root/testing
在屏幕命令日志 screenlog.0 中,我可以看到打印的是:
abc in hex: 61 62 63
åäö in hex: C3 A5 C3 A4 C3 B6
然后我尝试在启动期间从 rc.local 中的脚本(称为 testingscreen )运行相同的分离的 screen 命令:< / p>
在 rc.local 中添加了'/ root / testingscreen',该脚本包含与上面相同的 screen 命令:
#!/bin/sh
screen -dm -U -L -S testing /root/testing
在这种情况下,会发生错误,并在 screenlog.0 中写入以下内容:
abc
Traceback (most recent call last):
File "/root/testing", line 4, in <module>
print('\xe5\xe4\xf6')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
请注意,我使用了 screen 命令的-U参数,其含义如下:“以UTF-8模式运行屏幕。此选项告诉终端发送的屏幕,了解UTF-8编码字符。它还将新窗口的默认编码设置为'utf8'。“
为什么行为不同,我做错了什么?
答案 0 :(得分:1)
显然rc.local在设置语言环境之前运行。
请参阅https://askubuntu.com/questions/616808/program-in-rc-local-started-not-with-standard-localization
另一种解决方案是使用crontab和“@reboot”,它在重新启动时运行命令。