2016-11-21 1 views
0

python 스크립트를 한 서버에서 새로운 도커 컨테이너로 마이그레이션하고 있습니다. 그러나 인코딩과 관련하여 이상한 문제에 직면하고 있습니다. 성공하지 못한 채 몇 가지 솔루션을 시도했습니다.crontab에서 python 스크립트를 실행할 때 인코딩 문제가 발생했습니다.

터미널에서 직접 스크립트를 실행하면 (수동으로) 성공과 함께 실행됩니다.

UnicodeEncodeError: 'ascii' codec can't encode character

난 그냥 인코딩 확인하는 작은 스크립트를 생성 : 나는 crontab을 통해 실행한다면 나는 다음과 같은 오류가 발생 내가 수동으로 실행하는 경우

import sys 
print sys.stdout.encoding 

을 나는 다음과 같은 응답 얻을 :

UTF-8

그럼, 크론에서이 스크립트를 추가하고 파일로 출력 감독 :

을 0

그것은 비어있는 p.log를 저장 ... 그래서 나는 python이 crontab에서 인코딩을 얻지 못한다고 생각합니다.

나는 명령을 호출하기 전에 인코딩 변수에 crontab을 추가하는 몇 가지 제안을 보았지만 나에게는 효과가 없었다. exemple에 대한 는 :

* * * * * PYTHONIOENCODING=UTF-8 /tmp/p.py > /tmp/p.log 

또는

* * * * * LANG=UTF-8 /tmp/p.py > /tmp/p.log 

또한, 내 crontab 파일의 머리에 추가 된이 변수를 시도했다. 전혀 성공하지 못했습니다. 내가 설치 몇 로케일로 우분투를 사용하고

: 그것은 좋은 생각이 아니다 그래서 내가, 실행 여러 파이썬 스크립트를

LANG=en_US.UTF-8 
LANGUAGE= 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 

: 여기

locale -a 
    C 
    C.UTF-8 
    en_US.utf8 
    POSIX 

그리고 내 로케일 (외부 크론)입니다 그들을 편집 (또한, 내가 밖에서 cron 호출했을 때 완벽하게 실행)라고 말했다.

답변

1

실제로 crontab에 문제가있어서 파일을 편집 할 때 자동으로 다시로드되지 않았습니다.

service cron restart 

crontab /etc/crontab 

지금은 crontab 올바르게 환경 변수를로드 :

내가했던 다시로드를 강제로. crontab 파일의 헤더에는 다음 변수가 있습니다.

SHELL=/bin/bash 

TERM=xterm 
PYTHONIOENCODING=UTF-8 
LANG=en_US.UTF-8 
LC_ALL=en_US.UTF-8 
관련 문제