我将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/ …
当lib click检测到运行时是python3但编码是ASCII时,它会突然结束python程序:
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)
在我的情况下,我发现了这个问题的原因,当我从Mac连接到我的Linux主机时,Terminal.app将SSH会话区域设置为我的Mac区域设置(es_ES.UTF-8)但是我的Linux主机没有安装这样的语言环境(仅限en_US.utf-8).
我应用了一个初步的解决方法来解决它(但它有很多问题,请参阅已接受的答案):
import locale, codecs
# locale.getpreferredencoding() == 'ANSI_X3.4-1968'
if codecs.lookup(locale.getpreferredencoding()).name == 'ascii':
os.environ['LANG'] = 'en_US.utf-8'
Run Code Online (Sandbox Code Playgroud)
编辑:要获得更好的补丁,请参阅我接受的答案.
我的所有linux主机都安装了'en_US.utf-8'作为语言环境(Fedora默认使用它).
我的问题是:在python3脚本中选择/强制语言环境是否有更好(更强大)的方法?例如,在系统中设置一个可用的语言环境.
也许有一种不同的方法来解决这个问题,但我没有找到它.