Click отменяет дальнейшее выполнение, поскольку 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: Click отменяет дальнейшее выполнение, поскольку Python 3 был настроен на использование ASCII в качестве кодировки для среды. Любой переключатель на Python 2 или обратитесь к http://click.pocoo.org/python3/ для
шаги по смягчению.

Мне кажется, что это bash script. Почему у меня разные результаты? Также я следил за инструкциями в ссылке в сообщении об ошибке, но до сих пор не повезло.

[обновление] Я уже пробовал решение, предоставленное кликом, прежде чем я разместил этот вопрос. Проверьте результаты ниже (я запустил root):

[[email protected] 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
>>>

Ответ 1

Если вы пытаетесь выполнить тестовый набор, вы должны каждый раз устанавливать следующие переменные среды:

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:

Ответ 2

Добавляем больше к существующим решениям:

Если вы видите что-то вроде этой ошибки в 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

Если вы работаете на американском компьютере, en_US.utf-8 является выбранной кодировкой. В некоторых более новых системах Linux вы также можете использовать C.UTF-8 в качестве локали:

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

Взято из Python 3 Surrogate Handling

Ответ 3

В верхней части вашего Python script попробуйте поместить

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