Click将中止进一步执行,因为Python 3配置为使用ASCII作为环境的编码

Dus*_*Sun 27 locale redhat centos python-3.x python-click

我将Quokka Python/Flask CMS下载到CentOS7服务器.命令一切正常

sudo python3 manage.py runserver --host 0.0.0.0 --port 80
Run Code Online (Sandbox Code Playgroud)

然后我创建一个文件/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 $?
Run Code Online (Sandbox Code Playgroud)

但是我在跑步时遇到错误 sudo service quokkacms start

RuntimeError:Click将中止进一步执行,因为Python 3配置为使用ASCII作为环境的编码.切换到Python 2或参考http://click.pocoo.org/python3/进行
缓解步骤.

在我看来,它是bash脚本.为什么我得到不同的结果?我也按照错误信息中的链接说明,但仍然没有运气.

[更新]在发布此问题之前,我已经尝试过Click提供的解决方案.检查下面的结果(我在root中运行):

[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
>>>
Run Code Online (Sandbox Code Playgroud)

GHE*_*iLD 48

如果您尝试执行测试用例,则每次都必须设置以下环境变量:

export LC_ALL=en_US.utf-8
export LANG=en_US.utf-8
Run Code Online (Sandbox Code Playgroud)

每次这样做都将解决错误.
如果您使用IDE,也可以在IDE中进行设置.例如,请参阅PyCharm 2016中的以下设置.


Ami*_*aha 8

在现有解决方案中添加更多内容:

如果你在 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.
Run Code Online (Sandbox Code Playgroud)

您正在处理 Python 3 认为您仅限于 ASCII 数据的环境。这些问题的解决方案取决于您的计算机运行的区域设置。

例如,如果您有一台德国 Linux 机器,您可以通过将语言环境导出到 de_DE.utf-8 来解决问题:

export LC_ALL=de_DE.utf-8
export LANG=de_DE.utf-8
Run Code Online (Sandbox Code Playgroud)

如果您使用的是美国机器,则选择 en_US.utf-8 编码。在一些较新的 Linux 系统上,您还可以尝试将 C.UTF-8 作为语言环境:

export LC_ALL=C.UTF-8
export LANG=C.UTF-8
Run Code Online (Sandbox Code Playgroud)

取自Python 3 代理处理