Mac 터미널에서 (Ssh를 통해) 실행하는 경우에만 Python 프로그램이 실패합니다.

Mac 터미널에서 (Ssh를 통해) 실행하는 경우에만 Python 프로그램이 실패합니다.

데이터 처리(Linux) 클러스터에서 Python 프로그램을 실행하려고 합니다. Linux 데스크톱에서 클러스터로 ssh를 통해 클러스터로 연결하여 시작하면 프로그램이 제대로 실행되지만, Mac 노트북에서 클러스터로 ssh로 연결하여 실행하려고 하면 실패합니다. 다음 오류가 발생합니다.

[muzzle@cluster]~% acme-calibrate detector DARK --in-folder /gpfs/acme/exp/instrument/201802/experiment1/raw --out-folder /home/muzzle/dark_out --run 28
Traceback (most recent call last):
  File "/home/boff/calframework/framework/extern/bin/acme-calibrate", line 11, in <module>
    load_entry_point('acme-Offline-Calibration', 'console_scripts', 'acme-calibrate')()
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/setuptools-39.1.0-py3.4.egg/pkg_resources/__init__.py", line 480, in load_entry_point
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/setuptools-39.1.0-py3.4.egg/pkg_resources/__init__.py", line 2691, in load_entry_point
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/setuptools-39.1.0-py3.4.egg/pkg_resources/__init__.py", line 2322, in load
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/setuptools-39.1.0-py3.4.egg/pkg_resources/__init__.py", line 2328, in resolve
  File "/home/boff/pycalibrate_tmp/acme_calibrate/calibrate.py", line 236, in <module>
nb = nbformat.read(f, as_version=4)
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/nbformat/__init__.py", line 141, in read
return reads(fp.read(), as_version, **kwargs)
  File "/home/boff/calframework/framework/extern/lib/python3.4/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 150: ordinal not in range(128)

UTF에서 ASCII로의 일부 변환과 관련된 것 같지만 깊이가 없습니다.

Terminal.app과 iterm2 모두에서 동일한 오류가 발생합니다. 그런데 나는 iterm2 쉘 통합을 설치했지만 지금은 제거했습니다.

노트북의 로캘은 다음과 같습니다.

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

원격 서버의 로캘은 다음과 같습니다.

% locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=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=

이것은 내 Linux 데스크탑의 로케일이며 클러스터의 로케일과 동일합니다.

$ locale
LANG=en_GB.UTF-8
LANGUAGE=en_GB:en
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

답변1

올바른 해결책은 에 설명된 대로 터미널 고급 옵션에서 "시작 시 로케일 환경 변수 설정"을 설정 해제하는 것 같습니다.https://blog.remibergsma.com/2012/07/10/setting-locales-corrightly-on-mac-osx-terminal-application/

iterm2에서 동일한 작업을 수행하려면 여기에 설명된 대로 기본 설정 > 프로필 > 터미널 > 자동으로 로케일 변수 설정을 선택 취소해야 합니다.https://apple.stackexchange.com/questions/83428/lang-variable-wrong-in-iterm2-wheres-the-bug

답변2

게시물 OS X 터미널 UTF-8 문제 몇 가지 유용한 조언이 있습니다. 터미널 앱 설정에 도움이 되는 가이드:

  1. ~ 안에터미널->기본 설정->설정->고급:

    • 아래에국제적인, 문자 인코딩이 다음으로 설정되어 있는지 확인하세요.유니코드(UTF-8).

    • 아래에에뮬레이션, 다음을 확인하세요.Control-V를 사용하여 비ASCII 입력을 탈출하세요.~이다~ 아니다세트.

    이것만으로도 문제를 해결하기에 충분할 수 있습니다.

  2. 명령을 사용하여 .로 끝나야 하는 줄을 locale확인합니다 . 그렇지 않은 경우 bash 또는 홈 디렉터리에 다음과 같은 줄을 추가하세요.LC_CTYPE.UTF-8.profile.bashrc

    export LC_CTYPE=your-locale-here.UTF-8
    
  3. 홈 디렉터리에 다음 줄을 추가합니다 .inputrc(필요한 경우 생성).

    set meta-flag on
    set input-meta on
    set output-meta on
    set convert-meta off
    

새 설정을 적용하려면 bash를 다시 시작해야 합니다.

관련 정보