我不知道這是否應該在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」的代碼。
我不明白爲什麼它的行爲如此。
你是對的,模塊代碼中不應該有打印。我正在做一個代碼審查,並刪除「髒碼」。去搜索解決方案,爲什麼它的行爲如此並在以後回覆。 – heldt
我還沒有找到任何解決方案,但這個問題。到目前爲止,唯一不使用'打印'。 – heldt