2

これを 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' コーデックは位置 3 の文字 u'\xe4' をエンコードできません: 序数が範囲内にありません(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」変数は、「åäö」を含む場合がある文字列です。

なぜこのような振る舞いをするのか理解できません。

4

1 に答える 1

0

printあなたが説明しているのと同様のエラーをデバッグするために使用しているときに、Unicodeエラーが発生しました。

根本的な問題を解決する必要があると思います。を使用して、のコマンドをgrep含む行を検索し、をコメントアウトします。このコマンドは、標準モジュールでは使用されません。printaddons#print

于 2012-10-17T22:42:32.240 に答える