[FreeBSD] Python geeft "Unable to get the locale encoding"

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • MisterE
  • Registratie: April 2002
  • Laatst online: 23:01
Ik draai FreeNas met een (officiele) Sabnzbd jail.
Dit moet een Python postinstall script runnen. Deze is gemaakt in Python3

Als Sabnzbd deze start dan geeft ie de volgende error:
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ValueError: CODESET is not set or empty
Sabnzbd in de jail loopt onder gebruiker "media" en gebruikt Python2
# ps aux | grep -i sab
media 59416 0.5 2.6 707384 436520 ?? IJ 1:04PM 2:23.35 /usr/pbi/sabnzbd-amd64/bin/python2.7 -OO /usr/pbi/sabnzbd-amd64/bin/SABnzbd.py -s 0.0.0.0 --daemon -f /var/db/sabnzbd/sabnzbd.in
root 59730 0.0 0.2 154908 35452 ?? IJ 1:04PM 0:07.34 /usr/pbi/sabnzbd-amd64/bin/python2.7 /usr/pbi/sabnzbd-amd64/control.py start 192.168.1.106 12353
root 64045 0.0 0.0 16316 1716 0 R+J 2:01PM 0:00.00 grep -i sab
Als ik su (su - media) naar deze gebruiker dan kan ik het script gewoon aftrappen:
$ ./sabnzbd_post.py
CRITICAL:prog:8 parameters expected but 0 found
$ python3 sabnzbd_post.py
CRITICAL:prog:8 parameters expected but 0 found
De scripts hebben de volgende "shebang": #!/usr/bin/env python3

Het lijkt in de hoek van "locale" of vinden van "libraries" te liggen.
In de jail heb ik de volgende wijziging getest (met de nodige jail herstarts voor de zekerheid)
But to set a system-wide UTF-8 standard, just add this to /etc/login.conf:

default:\
(lines omitted) \
:charset=UTF-8:\
:lang=en_US.UTF-8:\
:setenv=LC_ALL=en_US.UTF-8:
"locale" onder "media" ziet er dan als volgt uit:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
ps:
in de jail zie ik ook een gebruiker "_sabnzbd"
_sabnzbd:*:350:350:sabnzb Daemon:/nonexistent:/usr/sbin/nologin
media:*:816:816:media:/home/media:/usr/local/bin/bash
Aangezien dat de bestanden die ie download de user "media" krijgen ga ik er van uit dat dit script ook hieronder draait?

Dit helpt niet. Iemand ideeen?

PS: Er is ook een "_sabnzb" gebruiker. Echter gedownloade bestanden krijgen de owner "media". Ik ga er dan ook vanuit dat het script ook hieronder zal lopen
_sabnzbd:*:350:350:sabnzb Daemon:/nonexistent:/usr/sbin/nologin
media:*:816:816:media:/home/media:/usr/local/bin/bash
Nog wat kleine testjes gedaan onder "media" user.

Script:
code:
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python3

import locale

#locale.setlocale(locale.LC_ALL, '')

print("getdefaultlocale")
print(locale.getdefaultlocale())
print("codeset")
print(locale.CODESET)


output
getdefaultlocale
(None, None)
codeset
0

[ Voor 19% gewijzigd door MisterE op 25-11-2016 15:37 ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:30

Hero of Time

Moderator LNX

There is only one Legend

Krijg je die error als je lokaal op de console aanmeld, of krijg je dit als je met SSH werkt? Want in geval van het laatste kan het natuurlijk de locale overnemen van de client die verbinding maakt en dat gaat niet altijd goed.

QnD oplossing zou zijn om de locale settings in je .bashrc oid te plakken, als BSD daar mee werkt en accepteert.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • MisterE
  • Registratie: April 2002
  • Laatst online: 23:01
ik hop gewoon door. Ik ssh naar de freenas doos (vanuit linux).
Dan:
jls
jexec <ID> sh
su - media

Ik ben iets verder. Ik heb de "shebang" aangepast in de scripts. En ik neem de python versie over die sab gebruikt. Dus: "#!/usr/pbi/sabnzbd-amd64/bin/python2.7"

Hiermee crasht de applicatie tenminste op v3 specifieke dingen.

Acties:
  • 0 Henk 'm!

  • MisterE
  • Registratie: April 2002
  • Laatst online: 23:01
ik heb een oplossing gevonden, ik denk dat al mijn eerdere aanpassingen onnodig waren.
Ik los het op door middel van een wrapper script. Dit zet voor het process de "LC_ALL" en verwijst naar de juiste Python3 libraries

code:
1
2
3
4
5
6
7
#!/usr/local/bin/bash

export PYTHONPATH=/usr/home/media/.local/lib/python3.5/site-packages
export LC_ALL=C

/mnt/python/sabnzbd_post.py $*
echo "Script finished"