Python 2.7 Raspberry Pi debian中启动脚本的Python编码问题

Python 2.7 Raspberry Pi debian中启动脚本的Python编码问题,python-2.7,encoding,raspberry-pi,debian,webiopi,Python 2.7,Encoding,Raspberry Pi,Debian,Webiopi,所以我有一个树莓皮运行Debian和。当我使用标准的start´$sudo/etc/init.d/webiopi start´命令启动守护程序时,它运行正常,但自动启动不起作用´$sudo update rc.d webiopi defaults´ 日志表明这是Python中的编码问题,我猜Python使用的是ascii,但脚本文件使用的是utf8 为什么它可以正常工作,但不能自动启动?有什么好方法可以解决这个问题?为了确认日志和您的怀疑,这是一个编码问题(最有可能是字节和字符串)。即使您使用#

所以我有一个树莓皮运行Debian和。当我使用标准的start´$sudo/etc/init.d/webiopi start´命令启动守护程序时,它运行正常,但自动启动不起作用´$sudo update rc.d webiopi defaults´

日志表明这是Python中的编码问题,我猜Python使用的是ascii,但脚本文件使用的是utf8


为什么它可以正常工作,但不能自动启动?有什么好方法可以解决这个问题?

为了确认日志和您的怀疑,这是一个编码问题(最有可能是字节和字符串)。即使您使用
#-*-编码:UTF-8-*-
将文件的编码设置为UTF-8,您在处理从一种形式更改为另一种形式的文本时仍然会遇到问题

字符串不是真正的字符串,而是以特定顺序表示的字节。UTF-8提供的编码比ASCII可以处理的字符多得多,因此,如果尝试将UTF-8编码字符串中存在的字符转换为ASCII编码字符串,则会出现错误,因为不存在此类编码

如果没有更多信息,例如代码和/或数据源,我无法给出更好的答案

阅读我们通过学习以下示例来学习:

注意1:在Python中,有3种情况发生了变化。要编写与Python 3兼容的代码,我建议阅读以下内容:

注意2:同样值得注意的是,如果在控制台上显示字符串时遇到编码问题,python有一个
-u
开关,可以在某些情况下使用,例如通过CGI脚本提供二进制文件时,它将关闭字符串缓冲,但这又打开了另一个虫子罐。但是,尽管如此,在不调用
-u
的情况下模仿这种行为:

>>> print 'test'
'test'
>>> import os
>>> import sys
>>> sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
>>> print 'test'
test

这确实取决于该计划

但是,如果手动启动和作为系统启动的一部分启动之间存在差异,那么核心差异应该在环境变量中。这是典型的,例如
inittab

这里有两个选项——要么您的区域设置未设置,要么脚本最终使用不同版本的python

对于较早的情况,考虑添加<代码> LANG > /代码>(精确),或者如果需要,请将代码> LCYALALL < /C> >(锤子)写入此脚本或全局环境,以启动所有任务。

您可以通过比较这两个调用来手动尝试:

sudo LC_ALL=en_US.UTF-8 /etc/init.d/webiopi start
vs


对于后者,请尝试更改
路径
以仅包含部分
/bin:/usr/bin:/usr/local/bin

确切的错误消息是什么?@flo遗憾的是,我没有固定的Pi访问权限,但沿着这条线,
'ascii'编解码器无法将字符****编码到位置**:序号不在范围内(128)
>>> print 'test'
'test'
>>> import os
>>> import sys
>>> sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
>>> print 'test'
test
sudo LC_ALL=en_US.UTF-8 /etc/init.d/webiopi start
sudo LC_ALL=C /etc/init.d/webiopi start