2012-10-17 56 views
2

我不知道這是否應該在serverfault或stackoverflow下發布。我不知道它是否是我的服務器上的語言環境問題,或者它是python還是OpenERP應用程序。OpenERP代碼在後臺運行時拋出異常

我有一個OpenERP的系統,我曾經遇到過一個很奇怪的問題。

在OpenERP的模塊有一些「打印」 -lines的是,用於調試的應用程序的各種開發。

像這些:

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' 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」變量是一個字符串,有時包含「AAO」的代碼。

我不明白爲什麼它的行爲如此。

回答

0

我已經在使用print爲類似於你的描述調試錯誤所經歷的Unicode的錯誤。

我想你應該解決問題的根源:使用grepaddons中找到print命令的行,並用#註釋掉它們。標準模塊從不使用print命令。

+0

你是對的,模塊代碼中不應該有打印。我正在做一個代碼審查,並刪除「髒碼」。去搜索解決方案,爲什麼它的行爲如此並在以後回覆。 – heldt

+0

我還沒有找到任何解決方案,但這個問題。到目前爲止,唯一不使用'打印'。 – heldt

相關問題