Python MOTD 스크립트가 학위 기호 °와 함께 작동하지 않습니다.

Python MOTD 스크립트가 학위 기호 °와 함께 작동하지 않습니다.

Ubuntu Server 18.04에서 Python 스크립트를 사용하여 MOTD를 생성하고 있습니다. 하드 드라이브 온도를 표시하려고 할 때 이 문제를 발견했습니다. 온도 표기법을 사용하여 온도를 표시하고 싶은데 ##°C서버에 로그인해도 출력이 표시되지 않습니다. 학위 기호를 제거하면 문제가 해결되었습니다.

샘플 코드

#!/usr/bin/python3

print(u"\u00B0" + "C")
print("°C")
print('°' + "C")
print('\u00B0' + "C")

파일을 로 저장 00-testpython하고 명령줄에서 스크립트를 실행하면 예상대로 출력됩니다.

$ ./00-testpython 
°C
°C
°C
°C

스크립트를 실행하면 run-parts예상된 응답이 반환됩니다.

$ run-parts --lsbsysinit /etc/update-motd.d
°C
°C
°C
°C

SSH를 사용하여 로그인하면 이전 버전의 콘텐츠가 표시되고 /run/motd.dynamic예상 MOTD대로 업데이트되지 않습니다.

나는 이것이 인코딩과 관련이 있다는 강한 느낌을 받았지만 그것이 무엇인지는 잘 모르겠습니다. Python에서 인쇄할 때 컬러 인쇄에 ANSI 이스케이프 문자를 사용할 수 있습니다. 이것이 왜 문제를 일으키는지는 잘 모르겠습니다.

학위 기호를 반향하는 것은 bash 스크립트를 사용하여 잘 작동합니다.

#!/bin/sh

echo °

답변1

의심했던 대로 인코딩 문제인 것으로 나타났습니다. MOTD 코딩에 관한 비슷한 질문을 찾았으며 여기에 필요한 답변이 있습니다. https://serverfault.com/a/207357LANG환경 변수를 확인하기 위해 로그인된 콘솔에서 명령을 실행하면 다음 값을 얻습니다.

$ echo $LANG
C.UTF-8

그러나 동일한 명령을 MOTD(bash) 스크립트에 넣으면 LANG로그인 시 비어 있습니다. 이 경우 기본값은 ASCII이므로 학위 기호를 인코딩할 때 문제가 발생할 수 있습니다.

이 문제를 해결하려면 스크립트에 다음 줄을 추가하면 됩니다.

export LANG="C.UTF-8"

나는 이 줄을 bash 스크립트에 넣은 다음 Python 스크립트를 호출합니다. 다음 명령을 사용하여 Python 스크립트에서 작동하도록 할 수 없습니다os.environ['LANG'] = "C.UTF-8"

관련 정보