Python 程序仅当从 Mac 终端运行(通过 ssh)时才会失败

Python 程序仅当从 Mac 终端运行(通过 ssh)时才会失败

我正在尝试在数据处理 (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 shell 集成,但现在我已将其删除。

笔记本电脑上的语言环境是:

$ 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-correctly-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并查看该LC_CTYPE行,该行应以 结尾.UTF-8。如果没有,则在 bash.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 才能使新设置生效。

相关内容