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-ID: 1622706206

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

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

l3xx3r
l3xx3r 15.12.2021 um 14:37:30 Uhr
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
istike2
istike2 15.12.2021 aktualisiert um 15:06:07 Uhr
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.
l3xx3r
l3xx3r 15.12.2021 um 15:17:34 Uhr
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.
istike2
istike2 15.12.2021 aktualisiert um 19:51:30 Uhr
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.
istike2
Lösung istike2 17.12.2021 um 00:03:11 Uhr
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.