web-dev-qa-db-ja.com

Python 3は環境のエンコーディングとしてASCII

Quokka Python/Flask CMSをCentOS7サーバーにダウンロードしました。すべてがコマンドで問題なく動作します

Sudo python3 manage.py runserver --Host 0.0.0.0 --port 80

次に、ファイル/etc/init.d/quokkacmsを作成します。ファイルには次のコードが含まれています

start() {
        echo -n "Starting quokkacms: "
        python3 /var/www/quokka/manage.py runserver --Host 0.0.0.0 --port 80
        touch /var/lock/subsys/quokkacms
        return 0
}
stop() {
        echo -n "Shutting down quokkacms: "
        rm -f /var/lock/subsys/quokkacms
        return 0
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)

        ;;
    restart)
        stop
        start
        ;;

    *)
        echo "Usage: quokkacms {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

しかし、Sudo service quokkacms startを実行するとエラーが発生します

RuntimeError:Python 3はASCIIを環境のエンコーディングとして使用するように設定されていたため、クリックはさらに実行を中止します。 Python 2に切り替えるか、 http://click.pocoo.org/python3/ を参照してください
緩和手順。

私には、bashスクリプトのようです。なぜ異なる結果が得られるのですか?また、エラーメッセージのリンクの指示に従いましたが、それでも運がありませんでした。

[更新]この質問を投稿する前に、Clickが提供するソリューションを試しました。以下の結果を確認します(ルートで実行):

[root@webserver quokka]# python3
Python 3.4.3 (default, Jan 26 2016, 02:25:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> import codecs
>>> print(locale.getpreferredencoding())
UTF-8
>>> print(codecs.lookup(locale.getpreferredencoding()).name)
utf-8
>>> locale.getdefaultlocale()
('en_US', 'UTF-8')
>>> locale.CODESET
14
>>>
22
Dustin Sun

テストケースを実行しようとしている場合は、must毎回次の環境変数を設定します。

export LC_ALL=en_US.utf-8
export LANG=en_US.utf-8

毎回これを行うと、エラーが解決します。

IDE実行設定としてこれを設定することも可能かもしれません

LC_ALL=en_US.UTF-8;LANG=en_US.UTF-8

たとえば、PyCharm 2016の次の設定を参照してください。

39
GHETTO.CHiLD

既存のソリューションにさらに追加する:

Python 3:

Traceback (most recent call last):
  ...
RuntimeError: Click will abort further execution because Python 3 was
  configured to use ASCII as encoding for the environment. Either switch
  to Python 2 or consult http://click.pocoo.org/python3/ for
  mitigation steps.

あなたがPython 3はあなたがASCIIデータに制限されていると考えている。に。

たとえば、ドイツのLinuxマシンを使用している場合は、ロケールをde_DE.utf-8にエクスポートすることで問題を修正できます。

export LC_ALL=de_DE.utf-8
export LANG=de_DE.utf-8

USマシンを使用している場合、en_US.utf-8が最適なエンコーディングです。一部の新しいLinuxシステムでは、ロケールとしてC.UTF-8を試すこともできます。

export LC_ALL=C.UTF-8
export LANG=C.UTF-8

Python 3 Surrogate Handling から取得

1
Amit Kushwaha