Python-Codierungsprobleme beim Startskript in Raspberry Pi debian

8

Also habe ich einen Raspberry Pi mit Debian und dem WebIOPi-System . Der Daemon läuft gut, wenn ich ihn mit einem Standardbefehl '$ sudo /etc/init.d/webiopi start' starte, aber der automatische Start funktioniert nicht '$ sudo update-rc.d webiopi defaults'.

Das Protokoll legt nahe, dass es sich um ein Codierungsproblem in Python handelt. Ich nehme an, dass Python ascii verwendet, aber die Skriptdatei utf8 verwendet.

Warum funktioniert es normal, aber nicht beim automatischen Start und was ist ein guter Weg, dies zu beheben?

    
Ingó Vals 08.12.2015, 21:46
quelle

2 Antworten

2

Um das Protokoll und Ihren Verdacht zu bestätigen, ist dies ein Codierungsproblem (Bytes vs String am wahrscheinlichsten). Selbst wenn Sie die Kodierung Ihrer Datei mit # -*- coding: utf-8 -*- auf UTF-8 setzen, können Sie immer noch Probleme mit Text haben, der von einem Formular in ein anderes geändert wurde.

Zeichenfolgen sind nicht wirklich Zeichenfolgen, sondern Darstellungen von Bytes in einer bestimmten Reihenfolge. UTF-8 ermöglicht die Codierung von viel mehr Zeichen, als ASCII verarbeiten kann. Wenn Sie also versuchen, ein in einer UTF-8-codierten Zeichenfolge vorhandenes Zeichen in eine ASCII-codierte Zeichenfolge zu konvertieren, erhalten Sie eine Fehlermeldung, da keine solche Codierung vorhanden ist .

Ich kann keine viel bessere Antwort ohne weitere Informationen wie Code und / oder Datenquelle geben.

Lesen Ссылка lernen wir, indem wir folgende Beispiele studieren:

%Vor%

In der Dokumentation wird auch erwähnt, dass Sie diese Ausnahmen behandeln können, indem Sie sie entweder ersetzen oder ignorieren:

%Vor%

HINWEIS 1 : In Python 3 haben sich die Dinge geändert. Zum Schreiben von Code, der mit Python 3 kompatibel ist, empfehle ich Folgendes:

Ссылка

ANMERKUNG 2 : Es ist auch erwähnenswert, dass python einen -u -Schalter hat, der in bestimmten Situationen verwendet werden kann, wenn Ihr Codierproblem auftritt, während Sie versuchen, die Zeichenfolge auf der Konsole anzuzeigen B. wenn Sie eine Binärdatei über ein CGI-Skript bereitstellen, wodurch die Pufferung von Zeichenfolgen deaktiviert wird, aber dadurch eine weitere Würmer-Dose geöffnet wird. Aber trotzdem, dieses Verhalten nachahmen, ohne -u aufzurufen:

%Vor%     
Jared Fields 17.12.2015 16:47
quelle
0

Das hängt wirklich von diesem Programm ab.

Wenn es jedoch einen Unterschied zwischen dem manuellen Start und dem Systemstart gibt, sollte der Hauptunterschied in Umgebungsvariablen liegen. Dies ist typisch für z.B. inittab .

Zwei Optionen hier - entweder Ihr Gebietsschema ist nicht eingerichtet oder das Skript verwendet eine andere Version von python .

Für den früheren Fall sollten Sie in diesem Skript oder in der globalen Umgebung für alle Startaufgaben LANG (präzise) oder falls erforderlich LC_ALL (ein Hammer) hinzufügen.

Sie können manuell versuchen, indem Sie diese beiden Aufrufe vergleichen:

%Vor%

gegen

%Vor%

Für letzteres sollte PATH so geändert werden, dass nur ein Teil von /bin:/usr/bin:/usr/local/bin

eingeschlossen wird     
Dima Tisnek 18.12.2015 13:44
quelle