istike2
Goto Top

Python - Method korrekt anwenden

Hallo,

ich habe hier in eine Fortbildungsaufgabe, mit der ich leider nicht weiterkomme:

Code: https://www.codepile.net/pile/w24jdaDz
(Um den Code auszuführen importieren ich am Anfang "wx". Dies ist eigentlich wxPython, die für wxGlade erforderlich ist. Dies ist in Python default nicht erhalten. Ich musste als es manuell in Anaconda / pyCharm installieren)

In der Class "Utility" wird ein PowerShell-Script ausgeführt, der das Ergebnis in einem JSON-Object speichert.
Dieses Objekt wird dann in der Method ausgelesen und die Keys werden in Variablen gespeichert (Zeile 43-48), die dann in einem wxGlade GUI angezeigt werden.

Ich habe mehrere Probleme mit dem Code:

#1 die in der Zeile 35 (innerhalb der Methode) definierte "json_from_powershell" wird außerhalb der Methode (wohl verständlicherweise) nicht erkannt.

Kann ich auf diesen Wert irgendwie durch die Klasse zugreifen oder soll ich diese als globale Variable definieren? Ich stehe etwas auf der Leitung.

#2 dieselbe Frage betrifft auch die Werte, die ich aus dem Dictionary-Objekt auslesen möchte.

#3 In der Zeile 139 konfiguriere ich den Button, um die Methode "readpcinfo" aufzurufen. Ist diese Lösung richtig?

Vielen Dank für eure Meinungen.

Gr. I.

Content-Key: 1622706206

Url: https://administrator.de/contentid/1622706206

Printed on: April 24, 2024 at 12:04 o'clock

Member: l3xx3r
l3xx3r Dec 15, 2021 at 13:37:30 (UTC)
Goto Top
Hi ich bin's mal wieder,

zu 1 und 2 hab ich dir das File dementsprechend angepasst.
Error Handling musst du dir dann noch dementsprechend anpassen.
Das Ganze ist natürlich ungetestet, da die entsprechende Datei fehlt, sollte aber meines Wissens so weit funktionieren. Ich bin mit Python nicht so bewandert und das ist nur, dass was ich auf die schnelle getippt habe.

https://www.codepile.net/pile/jL90V9xN

Zu 3 kann ich leider nichts sagen, da wie oben erwähnt mir die PS Datei fehlt.

Ich hoffe das hilft weiter & Grüße
Alex
Member: istike2
istike2 Dec 15, 2021 updated at 14:06:07 (UTC)
Goto Top
Vielen Dank Alex face-smile,

hier sind die von dir vorgenommenen Änderungen (linke Seite):

python_code_2

1. Du hast also am Anfang mit pcinfo = {} das Dictionary-Object angelegt. Die Methode liefert dieses Objekt dann beim "Return", korrekt?
(Ich dachte, dass die das Dictionary-Objekt in Zeile 58 angelegt wird und, dass es so genügt.)

2. Du hast die in meinem Fall überflüssigen IF-Anweisung gelöscht.

3. Du hast in den Zeilen "Variablen" angelegt. "Inforeturn" scheint dafür gedacht zu sein um einfach im Termin auszuschreiben. "jsonreturn" wird dann bei den GUI-Elementen verwendet.

Verstehe ich die Änderungen richtig?

Gr. I.
Member: l3xx3r
l3xx3r Dec 15, 2021 at 14:17:34 (UTC)
Goto Top
Jap soweit verstehst du das richtig, bis auf die IF Anweisung. Die solltest du trotzdem wieder miteinbauen damit es zu keinem Absturz kommt, falls es Probleme gibt.

Grüße
*Gerne dann berichten, ob es funktioniert.
Member: istike2
istike2 Dec 15, 2021 updated at 18:51:30 (UTC)
Goto Top
Hi,

Code: https://www.codepile.net/pile/WmbR3em2

Dies ist der PowerShell-Code der ausgeführt werden soll:

$cinfo = Get-ComputerInfo
# Construct and output and object whose properties contain all data of interest, in JSON format.
[pscustomobject] @{
  winver = Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ReleaseId  
  OsName = $cinfo.OsName
  OsVersion = $cinfo.OsVersion
  OsBuildNumber = $cinfo.OsBuildNumber
  OsHardwareAbstractionLayer = $cinfo.OsHardwareAbstractionLayer
  OfficeVer = Get-ItemPropertyValue "registry::HKEY_CLASSES_ROOT\Word.Application\CurVer" '(default)'  
} | ConvertTo-Json

Wenn ich den getrennt ausführe, bekomme ich Folgendes als Ergebnis:

{
    "winver":  "1909",  
    "OsName":  "Microsoft Windows 10 Pro",  
    "OsVersion":  "10.0.18363",  
    "OsBuildNumber":  "18363",  
    "OsHardwareAbstractionLayer":  "10.0.18362.1533",  
    "OfficeVer":  "Word.Application.16"  
}

[Done] exited with code=0 in 4.068 seconds

Wenn ich den Code aus Python heraus ausführe, kommt leider ein Exception, außerdem findet Python problematisch, dass "dect_" nicht definiert wurde:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Users\mr3968\Anaconda3\envs\SystemScriptWithGUI\lib\threading.py", line 973, in _bootstrap_inner  
    self.run()
  File "C:\Users\mr3968\Anaconda3\envs\SystemScriptWithGUI\lib\threading.py", line 910, in run  
    self._target(*self._args, **self._kwargs)
  File "C:\Users\mr3968\Anaconda3\envs\SystemScriptWithGUI\lib\subprocess.py", line 1479, in _readerthread  
    buffer.append(fh.read())
  File "C:\Users\mr3968\Anaconda3\envs\SystemScriptWithGUI\lib\encodings\cp1252.py", line 23, in decode  
    return codecs.charmap_decode(input,self.errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 228: character maps to <undefined>  
Traceback (most recent call last):
  File "C:\Daten\3_Istvan\XXX-AG\Fortbildung\Python\GUI-Testprojekte wxGlade\PS-Test\PC_Info_auslesen_V3_Alex.py", line 58, in <module>  
    jsonreturn = Utility.readpcinfo(ps_script_path, POWERSHELL_PATH)
  File "C:\Daten\3_Istvan\XXX-AG\Fortbildung\Python\GUI-Testprojekte wxGlade\PS-Test\PC_Info_auslesen_V3_Alex.py", line 42, in readpcinfo  
    "winver_label" : dict_.get('winver'),  
NameError: name 'dict_' is not defined  

Mir fehlen einfach die Basics ... face-sad
Ich denke ich arbeite mich an einem Youtube-Tutorial durch, wird wohl effizienter sein.

Wie auch immer, vielen Dank für deine Unterstützung.

LG

I.
Member: istike2
Solution istike2 Dec 16, 2021 at 23:03:11 (UTC)
Goto Top
Mit der freundlichen Unterstützung von Alex (I3xx3r) ist das Programm jetzt lauffähig.
Vielen Dank Alex! face-smile

https://www.codepile.net/pile/71ZJnV12

Gr. I.