Bitte zu opsi-makeproductfile - setdefaultencoding("utf-8")

Antworten
pandel
Beiträge: 830
Registriert: 25 Jan 2013, 16:47

Bitte zu opsi-makeproductfile - setdefaultencoding("utf-8")

Beitrag von pandel »

Hallo!

Ich habe eine Frage. Wäre es möglich, daß im opsi-makeproductfile Python Script zu Beginn das default encoding explizit nochmal auf UTF-8 gesetzt wird?

Folgender Hintergrund:
Bei uns werden opsi Kommandos zeitgesteuert per PLINK.EXE ausgeführt, was grundsätzlich funktioniert. PLINK ist ja genau für solche Scriptzwecke gemacht worden ist. Das Problem ist, bei einem zeitgesteuerten Build darf im control File kein einziges Sonderzeichen sein, sonst rennt opsi-makeproductfile vor die Wand. Ich habe zwar gesehen, daß im Quellcode bereits # -*- coding: utf-8 -*- enthalten ist, leider wirkt das nicht, wenn man das Script per PLINK abfeuert (obwohl die Linux Codepage sauber in der Konsolensitzung von PLINK angezogen wird! Scheint ne Macke von Python zu sein...).
Die Fehlermeldung lautet dann: 'ascii' codec can't encode character: ordinal not in range(128) Wenn man danach googelt, gibt es Dutzende Berichte darüber...

Kann man ganz leicht testen:
PLINK.EXE <user>@<server> python -c 'import sys; print sys.getdefaultencoding()'
Das liefert hartnäckig 'ascii' zurück, egal was man macht.

Wenn man nun direkt unterhalb des sys Imports noch folgendes einfügt
reload(sys)
sys.setdefaultencoding("utf-8")

wird Python dazu gezwungen, UTF-8 zu nutzen.

Damit rennt es sauber, wenn per PLINK.EXE ausgeführt.

Da das control File ja auch in UTF-8 kodiert sein soll, könnte ich mir vorstellen, daß das vielleicht eine unkomplizierte Änderung ist. Ich habe diese Änderung für mich bereits gemacht, aber vielleicht ist es ja auch für andere noch von Nutzen...

Lieber Gruß
Holger
Benutzeravatar
ueluekmen
uib-Team
Beiträge: 1940
Registriert: 28 Mai 2008, 10:53

Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

Beitrag von ueluekmen »

Hi,

vielen Dank für die Info. Wir haben intern ein Ticket aufgemacht und werden dies prüfen.

Grüße
e. ueluekmen


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


pandel
Beiträge: 830
Registriert: 25 Jan 2013, 16:47

Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

Beitrag von pandel »

Hallo!

Nix zu danken. Ich möchte hinzufügen, daß es sich um die opsi ServerVM 4.0.2 aus dem Downloadbereich handelt, und die Clients von denen aus das PLINK abgefeuert wird, sind Win XP. Vielleicht ist es ja os- oder distributionsspezifisch...

Gruß
Holger
Benutzeravatar
d.oertel
uib-Team
Beiträge: 3327
Registriert: 04 Jun 2008, 14:27

Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

Beitrag von d.oertel »

Hi,

wenn ich folgendes richtig verstehe:
http://stackoverflow.com/questions/1154 ... utf-8-utf8

dann könnte das Problem in der _putty.au3 liegen:

Code: Alles auswählen

StdinWrite($plinkHandle, "chcp 1252" & @CRLF) ; change codepage for cmd.exe instance to 1252 (West European Latin)
Weiterhin wollte ich die ganze Arbeit an dieser Stelle mal heftig loben und den Vorschlag machen im forum Unten im Bereich 'Opsi Community Projects' für den opsi Packagebuilder einen eigenen Bereich aufzumachen, damit das Tool nicht im 'Freien Support' untergeht.

gruß
d.oertel


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


pandel
Beiträge: 830
Registriert: 25 Jan 2013, 16:47

Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

Beitrag von pandel »

Hi!

Erstmal danke für das Lob! Natürlich habe ich nichts gegen einen Bereich unter Community Projects! Das wär natürlich toll, danke für das Angebot! Muss ich dafür irgendwas machen?

Trifft sich ganz gut, es kommt morgen oder übermorgen noch ein Update, was es ermöglichen wird, opsi Aufträge per GUI am Server als AT Jobs anzulegen, damit auch zeitgesteuerte Installation, Update und Deinstallation möglich werden ;-)

Was das aber das eigentliche Problem anbelangt: der Bereich, den du gepostet hast, ist in der _putty.au3 bereits in einem #cs...#ce Kommentarblock, d. h. ich benutze das gar nicht. Das war nämlich die ursprüngliche Idee, also Codepage ändern, Befehl ausführen und Codepage wieder zurückändern. Das klappt aber nicht! Nur mit der Änderung im jeweiligen Python Skript selber ließ sich Python zum mitmachen zu bewegen...

Mehr Infos dazu hier: http://blog.notdot.net/2010/07/Getting- ... -in-Python

Mein Vorschlag scheint auch mehr eine Übergangslösung zu sein. Korrekt erscheint mir folgendes aus dem verlinkten Artikel

Code: Alles auswählen

To decode a byte string as text, use var.decode(encoding) (eg, var.decode('utf-8'), with the correct encoding. To encode a text string as bytes, use var.encode(encoding).
Aber dafür bin ich nicht tief genug im Thema um zu entscheiden, wieviel Aufwand das bedeutet...

Gruß
Holger
Benutzeravatar
d.oertel
uib-Team
Beiträge: 3327
Registriert: 04 Jun 2008, 14:27

Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

Beitrag von d.oertel »

Hi,

ich habe den Bereich 'OPSI PackageBuilder' im 'Community Projects' Bereich angelegt und Dich zum Moderator gemacht.

Soll ich den bisherigen Thread (viewtopic.php?f=7&t=4307) da hinein schieben ?

Wg. dem Python Fix rede ich nochmal mit den Kollegen.

Was mir noch aufgefallen ist: Ein erstelltes Paket kann ich nicht überschreiben. Ich vermute der Grund ist die interaktivität des opsi-makeproduct in diesem Fall. Hier könnte ein zusätzlicher Commandline Parameter helfen.
Sehe ich das richtig ?

gruß
d.oertel


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


pandel
Beiträge: 830
Registriert: 25 Jan 2013, 16:47

Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

Beitrag von pandel »

Vielen Dank ;-)! Verschieben des Themas wäre super nett, ja!

Das man erstellte nicht überschreiben kann, liegt daran, daß er prüft, ob ein Paket gleicher Version schon da ist. Dann ist einfach der Button deaktiviert. Ich habe aber im eigentlichen PackageBuilder Thread noch einen Vorschlag bekommen, denn ich wohl umsetzen werde. Allgemein: Button immer aktiv, und bei Vorhandensein des Pakets auf überschreiben, Version inkrementieren oder abbrechen abfragen. Klingt recht vernünftig. Überschreiben mach ich dann als löschen, neuanlegen.

Oder meintest du einen zusätzlichen Commandline Parameter für opsi-makeproductfile?
pandel
Beiträge: 830
Registriert: 25 Jan 2013, 16:47

Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

Beitrag von pandel »

Hi,

das mit dem Encoding scheint echt ein Python Problem zu sein. Jetzt hat es sich auch bei opsi-admin herausgestellt. Ich nutze im OPSI PackageBuilder opsi-admin -r -d method getProducts_listOfHashes und eine Forenkollege hat unter CentOS6 das Problem, wenn er nicht innerhalb von opsi-admin in Zeile 67 outEncoding = 'utf-8' hart einfügt, kommt keine Produktliste zurück. Ich nehme aber nur den JSON String und parse den, es scheint daher direkt an der Ausgabe von opsi-admin zu liegen. Ich hab hier leider kein CentOS, um das testen zu können. Was dabei total beknackt ist, ich nutze ja eure opsi- servervm, da passiert das nicht! Also Python scheint sich da auch nicht schlüssig zu sein, wann es das Encoding erkennen will und wann nicht...

Lieber Gruß
Holger
Benutzeravatar
d.oertel
uib-Team
Beiträge: 3327
Registriert: 04 Jun 2008, 14:27

Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

Beitrag von d.oertel »

Hi,

naja - wenn ich auf der Maschine selbst arbeite oder per putty auf dem Server bin und mit utf8 in der putty einstellung arbeite passiert das Problem nicht, zumindest ist mir dahingehend nichts bekannt.

gruß
d.oertel


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


pandel
Beiträge: 830
Registriert: 25 Jan 2013, 16:47

Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

Beitrag von pandel »

Das ist ja das merkwürdige... ich verstehe das auch nicht, wieso. Wenn ich bei mir python -c 'import sys; print sys.stdout.encoding' per putty absetze, ist alles gut, dann kommt "UTF-8". Per Plink kommt "None". Ich muss mir dazu was ausdenken...

EDIT: Ich glaube, es gibt eine Lösung. Wenn ich vor den entsprechenden Befehl ein export PYTHONIOENCODING='utf-8'; setze scheint es zu funktionieren :D Das baue ich erstmal ein und dann sehen wir weiter... Erstmal danke!
Antworten