Bitte zu opsi-makeproductfile - setdefaultencoding("utf-8")
Bitte zu opsi-makeproductfile - setdefaultencoding("utf-8")
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

opsi PackageBuilder - Python Edition
opsibian-gen - RaspberryPi Image Generator mit opsi 4.1
Winst32 Preprocessor
Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-
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
Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-
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

opsi PackageBuilder - Python Edition
opsibian-gen - RaspberryPi Image Generator mit opsi 4.1
Winst32 Preprocessor
Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-
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)
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
Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-
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).
Gruß
Holger

opsi PackageBuilder - Python Edition
opsibian-gen - RaspberryPi Image Generator mit opsi 4.1
Winst32 Preprocessor
Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-
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
Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-

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?

opsi PackageBuilder - Python Edition
opsibian-gen - RaspberryPi Image Generator mit opsi 4.1
Winst32 Preprocessor
Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-
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

opsi PackageBuilder - Python Edition
opsibian-gen - RaspberryPi Image Generator mit opsi 4.1
Winst32 Preprocessor
Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-
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
Re: Bitte zu opsi-makeproductfile - setdefaultencoding("utf-
EDIT: Ich glaube, es gibt eine Lösung. Wenn ich vor den entsprechenden Befehl ein export PYTHONIOENCODING='utf-8'; setze scheint es zu funktionieren


opsi PackageBuilder - Python Edition
opsibian-gen - RaspberryPi Image Generator mit opsi 4.1
Winst32 Preprocessor