Skip to main content
 首页 » 编程设计

python之OpenERP 代码在后台运行时抛出异常

2025年05月04日11telwanggs

我不知道这是否应该发布在 serverfault 或 stackoverflow 下。我不知道这是我服务器上的语言环境问题,还是 python 或 OpenERP 应用程序出了问题。

我有一个 OpenERP 系统,但遇到了一个很奇怪的问题。

在 openERP 模块中有一些“打印”行,不同的开发人员使用这些行来调试应用程序。

像这些:

print "Value: %s" % variable 

和

 print "Value: " + str(variable) 

如果我在普通终端启动 OpenERP,它会在前台正常运行,并在控制台打印调试日志和打印件。该应用程序从不给我异常(exception)。

现在解决问题!

早些时候,我在屏幕上启动了应用程序,这样我就可以在应用程序运行时分离它并关闭与服务器的连接。

代码在“屏幕”中运行时不会抛出任何异常

我想要 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' codec can't encode character u'\xe4' in position 3: ordinal not in range(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”变量是一个字符串,有时包含“åäö”。

我不明白为什么它会这样。

请您参考如下方法:

我在使用 print 调试类似于您描述的错误时遇到了 Unicode 错误。

我认为你应该从根本上解决问题:使用 grep 在 addons 中找到带有 print 命令的行,并注释他们用 # 出来。 print 命令从未在标准模块中使用。