Проблема с кодированием запущенного файла Python на flask в Apache

#python #flask

#python #flask

Вопрос:

Использование Flask на веб-сервере apache на CentOS (ClearOS).

Запускаю веб-проект APP FLASK, и в этом файле я хочу запустить другой файл python с помощью команды: os.system («python3 module.py «), что становится проблемой, потому что оно возвращает кодировку ANSI_X3.4-1968.

В моем приложении я хотел бы запустить файл как cron, поэтому я просто открою файл и запущу, как показано ниже.

     @app.route('/crontab')
    def do_crontab():
        crontab_arg = request.args.get('cron')
        app_root = os.path.dirname(os.path.abspath(__file__))
        crontab_run = "python3 "   app_root   "/module.py "   crontab_arg
        os.system(crontab_run)
        return "Done"
  

В моей локальной среде с Flask это работает и возвращает utf-8.

В файле «module.py «Я использую команду: sys.stdout.encoding, и это то, что дает мне результаты.

Я использую тот же python3.8 и тот же env. Таким образом, разница заключается в разных ОС и Apache вместо Werkzeug.

На моем сервере:

 
    [root@server ~]# locale
    LANG=sv_SE.UTF-8
    LC_CTYPE="sv_SE.UTF-8"
    LC_NUMERIC="sv_SE.UTF-8"
    LC_TIME="sv_SE.UTF-8"
    LC_COLLATE="sv_SE.UTF-8"
    LC_MONETARY="sv_SE.UTF-8"
    LC_MESSAGES="sv_SE.UTF-8"
    LC_PAPER="sv_SE.UTF-8"
    LC_NAME="sv_SE.UTF-8"
    LC_ADDRESS="sv_SE.UTF-8"
    LC_TELEPHONE="sv_SE.UTF-8"
    LC_MEASUREMENT="sv_SE.UTF-8"
    LC_IDENTIFICATION="sv_SE.UTF-8"
    LC_ALL=sv_SE.UTF-8

  

У кого-нибудь есть идеи?

Комментарии:

1. Можете ли вы поделиться своей конфигурацией Apache? Я полагаю, вы используете mod_wsgi? Вы /etc/apache2/envvars вообще редактировали?

2. Спасибо за быстрый ответ. 1. lyron.gyllenwaldt.com/httpd.conf (конфигурационный файл apache) 2. Используя mod_wsgi, я не редактировал никаких envvars …. используя ClearOS (построенный на CentOS). Более или менее следовал руководству: dev.to/sm0ke /…

3. Ах, Apache не обязательно использует системный язык по умолчанию. Попробуйте раскомментировать последнюю строку /etc/apache2/envvars и перезапустить Apache.

4. Это сделало свое дело 🙂 Большое спасибо! =)

5. Отлично, я добавлю это в качестве ответа 👍🏻

Ответ №1:

Apache не обязательно использует системный язык по умолчанию.

Попробуйте раскомментировать последнюю строку в /etc/apache2/envvars и перезапустить Apache. Это заставит Apache использовать ваш системный язык.