我不知道是否应该在serverfault或stackoverflow下发布。我不知道它是否是我服务器上的语言环境问题,或者它是python还是正在运行的OpenERP应用程序。
我有一个OpenERP系统,我遇到了一个非常奇怪的问题。
在openERP模块中,有一些“打印”行,各种开发人员用它来调试应用程序。
喜欢这些:
print "Value: %s" % variable
和
print "Value: " + str(variable)
如果我在普通终端中启动OpenERP,它将在前台运行良好,并在控制台中打印调试日志和打印件。该应用程序从未给我一个例外。
现在问题了!
之前我已经在屏幕上启动了应用程序,以便在应用程序运行时我可以将其分离并关闭与服务器的连接。
在“屏幕”
中运行时,代码不会抛出任何异常而不是我希望拥有init.d脚本的屏幕。我制作了这个剧本:
#!/bin/sh
# Configuration variables for openerp
DAEMON="/opt/openerp-server-6.0.3/bin/openerp-server.py"
ARGS="--config=/opt/openerp-server-6.0.3/openerp-server.conf"
NAME="openerp"
USER="openerp"
DESC="openerp"
PIDFILE="/var/run/$NAME.pid"
# Startup alternatives
case "$1" in
start)
echo "Starting ${DESC}"
start-stop-daemon --start --background --pidfile $PIDFILE --chuid $USER --make-pidfile --exec $DAEMON -- $ARGS
;;
stop)
echo "Stopping ${DESC}"
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid --oknodo
echo "${NAME}."
;;
*)
echo "Usage: start|stop"
;;
esac
脚本有效,它启动和停止服务器。
当我使用从excel文件导入数据的模块时,我得到了这个异常。我也在代码的其他地方得到例外,它试图打印一个包含瑞典字母'åäö'的字符串。
UnicodeEncodeError:'ascii'编解码器无法对字符u'\ xe4'进行编码 位置3:序数不在范围内(128)
我认为这是'start-stop-daemon'命令改变了语言环境或某些东西。因此,我没有使用参数'--background'强制应用程序到后台,而是尝试了这个:
start-stop-daemon --start --pidfile $PIDFILE --chuid $USER --make-pidfile --exec $DAEMON -- $ARGS &> /dev/null
这解决了UnicodeEncodeError。我想到的一切快乐。但!
现在我收到输入/输出错误
IOError: [Errno 5] Input/output error
生成此代码的代码
print pay_order
'pay_order'变量是一个有时包含'åäö'的字符串。
我无法理解为什么它会像这样。
答案 0 :(得分:0)
在使用print
调试类似于您描述的错误时,我遇到了Unicode错误。
我认为您应该从根本上解决问题:使用grep
在print
中找到包含addons
命令的行,并使用#
将其注释掉。 print
命令从未在标准模块中使用。