启动期间使用分离的屏幕命令的UnicodeEncodeError

时间:2015-03-03 16:48:51

标签: python-3.x encoding utf-8 raspberry-pi gnu-screen

我有一个小的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'。“

为什么行为不同,我做错了什么?

1 个答案:

答案 0 :(得分:1)

显然rc.local在设置语言环境之前运行。

请参阅https://askubuntu.com/questions/616808/program-in-rc-local-started-not-with-standard-localization

另一种解决方案是使用crontab和“@reboot”,它在重新启动时运行命令。