Python programı yalnızca bir mac terminalinden çalıştırıldığında (ssh aracılığıyla) başarısız olur


1

Veri işleme (linux) kümesinde bir python programı çalıştırmaya çalışıyorum. Program, linux masaüstümden kümeye ssh atarsam başlatır ve başlatır, ancak mac dizüstü bilgisayarımdan kümeye ssh atarsam çalıştırmaya çalışırsam aşağıdaki hatayı alıyorum:

[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’den ASCII’ye dönüşümle ilgili gibi görünüyor, ancak ben derinlikten iniyorum.

Hem terminal.app hem de iterm2 ile aynı hatayı alıyorum. BTW Iterm2 kabuk entegrasyonu yüklü vardı ama onları şimdi kaldırdım.

Dizüstü bilgisayardaki yerel ayar şudur:

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

Uzak sunucudaki yerel ayar:

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

Bu linux masaüstümdeki yerel ayardır, kümeninkiyle aynıdır:

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

Her iki terminal de UTF-8 kullanıyor mu? Nedir LANG ve LC_* Her iki durumda da değişkenler? Görmek export | grep -E ' (LANG|LC_)'
pabouk

Bana oldukları gibi görünüyor. Bir göz atmak istiyorsanız, soruyu yerelin çıktısını ekledim.
muzzle

Yanıtlar:


1

Terminal gelişmiş seçeneklerinde açıklandığı gibi, doğru çözüm, "Başlangıçta yerel ortam ortam değişkenlerini başlangıçta ayarla" yı ayarlamaktı. https://blog.remibergsma.com/2012/07/10/setting-locales-correctly-on-mac-osx-terminal-application/

Aynı şeyi iterm2'de yapmak için Tercihler & gt; Profiller & gt; Terminal & gt; Yerel değişkenleri burada açıklandığı gibi otomatik olarak ayarla https://apple.stackexchange.com/questions/83428/lang-variable-wrong-in-iterm2-wheres-the-bug


0

Posta OS X Terminal UTF-8 sorunları dayalı bazı yararlı önerileri vardır. Terminal Apps'i kurmanıza yardımcı olacak bir rehber :

  1. İçinde Terminal = Tercihleri- & gt; Ayarlar & gt Advanced :

    • Altında Uluslararası , karakter kodlamasının ayarlandığından emin olun. Unicode (UTF-8) .

    • Altında emülasyon , emin olun Control-V ile ASCII olmayan girişden çık olduğu değil ayarlayın.

    Bu sorunu kendi başına çözmek için yeterli olabilir.

  2. Komutu kullan locale ve bak LC_CTYPE olması gereken çizgi ile bitmek .UTF-8. Olmazsa, o zaman bash .profile veya .bashrc Ana dizinde şuna benzer bir satır ekle:

    export LC_CTYPE=your-locale-here.UTF-8
    
  3. Aşağıdaki satırları .inputrc Ana dizinde (gerekirse oluşturun):

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

Yeni ayarların etkili olması için bash'yi yeniden başlatmanız gerekir.


Sadece üç adımı da denedim ama işe yaramadı. BTW, bir göz atmak isterseniz, soruna yerel ayarın çıkışını ekledim.
muzzle

Çıktılarındaki farklılıkları incelemek ilginç olurdu locale Linux ve mac için.
harrymc

Merhaba @ harrymc, ben sadece konunun açıklamasına ekledi
muzzle

1
Linux ve Mac'ten bağlandığınızda, sunucudaki yerel ayar farklı mı?
pabouk

Masaüstündeki yerel ayar kümeyle aynıdır. Mac yerel ayarımı aynı olarak ayarlamaya çalışacağım
muzzle
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.