Beim Versuch, alle gespeicherten WLAN-Passcodes und -Namen abzurufen, ist beim Ausführen eines Netsh-Befehls ein Fehler aufgetreten, da ein Zeichen durch das Unterprozessmodul falsch codiert wurde.< /p>
Kontext:
Wenn ich netsh wlan showprofiles name=* ausführe, fällt mir auf, dass nur das Das erste Ergebnis zeigt seinen Hauptinhalt an. Um alle Schlüssel zu erfassen, musste ich den Befehl also einmal für jeden Profilnamen ausführen (den ich über „netsh wlan show Profiles“ erhalten habe). Das Problem besteht darin, dass die Verwendung von subprocess.run für jeden davon unglaublich langsam ist, also habe ich mich entschieden, einen Prozess über subprocess.Popen zu verwenden und einfach in dessen stdin zu schreiben .
Code testen:
Code: Select all
import subprocess
process = subprocess.Popen(
"cmd",
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
encoding='utf-8',
creationflags=subprocess.CREATE_NO_WINDOW)
process.stdin.write(f'netsh wlan show profiles name="Leonard’s iPhone iP15" key=clear\n')
process.stdin.flush()
process.stdin.write(f'echo test’test\n')
process.stdin.flush()
print(process.communicate())
Code: Select all
C:>netsh wlan show profiles name="Leonard’s iPhone iP15" key=clear
Profile "LeonardΓÇÖs iPhone iP15" is not found on the system.
C:>echo test’test
test’test
Dieser Fehler tritt nicht auf, wenn netsh wlan showprofiles name="Leonard's iPhone iP15" key=clear direkt in CMD ausgeführt wird, da ich das erfolgreiche Ergebnis erhalte:
Code: Select all
Profile Leonard’s iPhone iP15 on interface Wi-Fi: ...
Zusätzliche Details:
Ich habe Encoding='utf- gewählt. 8', weil ich Probleme hatte, das Symbol ' aus Process.stdout zu lesen, ohne direkt anzugeben, dass ich utf-8 verwenden wollte. Ich habe andere Kodierungen wie cp437 (aus diesem Beitrag) und cp1252 (aus locale.getpreferredencoding) ausprobiert, aber diese führten zu mehr Kodierungs-/Dekodierungsproblemen als mit utf-8.