Das Python-Programm schlägt nur fehl, wenn es (über SSH) von einem Mac-Terminal ausgeführt wird

Das Python-Programm schlägt nur fehl, wenn es (über SSH) von einem Mac-Terminal ausgeführt wird

Ich versuche, ein Python-Programm auf einem Datenverarbeitungscluster (Linux) auszuführen. Das Programm läuft einwandfrei, wenn ich von meinem Linux-Desktop aus per SSH auf den Cluster zugreife und es starte. Wenn ich jedoch von meinem Mac-Laptop aus per SSH auf den Cluster zugreife und versuche, es auszuführen, tritt die folgende Fehlermeldung auf:

[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)

Es scheint mit einer Konvertierung von UTF nach ASCII zusammenzuhängen, aber ich bin überfordert.

Ich erhalte mit terminal.app und iterm2 denselben Fehler. Übrigens hatte ich früher die iterm2-Shell-Integration installiert, habe sie jetzt aber entfernt.

Das Gebietsschema auf dem Laptop ist:

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

Das Gebietsschema auf dem Remote-Server ist:

% 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=

Dies ist das Gebietsschema auf meinem Linux-Desktop, es ist identisch mit dem des Clusters:

$ 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=

Antwort1

Es sieht so aus, als ob die richtige Lösung darin bestand, die Option "Lokale Umgebungsvariablen beim Start festlegen" in den erweiterten Terminaloptionen zu deaktivieren, wie inhttps://blog.remibergsma.com/2012/07/10/setting-locales-correctly-on-mac-osx-terminal-application/

Um dasselbe auf iterm2 zu tun, müssen Sie Einstellungen > Profile > Terminal > Lokale Variablen automatisch festlegen deaktivieren, wie hier beschrieben.https://apple.stackexchange.com/questions/83428/lang-variable-wrong-in-iterm2-wheres-the-bug

Antwort2

Die Post UTF-8-Probleme im OS X-Terminal hat einige nützliche Ratschläge, basierend auf Eine Anleitung zum Einrichten von Terminal-Apps:

  1. InTerminal->Einstellungen->Einstellungen->Erweitert:

    • UnterInternational, stellen Sie sicher, dass die Zeichenkodierung aufUnicode (UTF-8).

    • UnterEmulation, sicher gehen, dassEscapen Sie Nicht-ASCII-Eingaben mit Strg+VIstnichtSatz.

    Dies allein kann bereits ausreichen, um das Problem zu lösen.

  2. Verwenden Sie den Befehl localeund sehen Sie sich die LC_CTYPEZeile an, die mit enden sollte .UTF-8. Wenn dies nicht der Fall ist, fügen Sie in Bash .profileoder .bashrcim Home-Verzeichnis eine Zeile wie diese hinzu:

    export LC_CTYPE=your-locale-here.UTF-8
    
  3. .inputrcFügen Sie im Home-Verzeichnis (bei Bedarf erstellen) folgende Zeilen hinzu :

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

Sie müssen Bash neu starten, damit die neuen Einstellungen wirksam werden.

verwandte Informationen