Decode Powershell-Ausgabe, die möglicherweise Nicht-ASCII-Unicode-Zeichen enthält, in eine Python-Zeichenfolge

Ich muss die von Python aufgerufene Powershell-Standardausgabe in eine Python-Zeichenfolge dekodieren.

Mein letztes Ziel ist es, die Namen der Netzwerkadapter in Windows in Form einer Liste von Zeichenfolgen abzurufen. Meine aktuelle Funktion sieht so aus und funktioniert gut unter Windows 10 in englischer Sprache:

def get_interfaces():
    ps = subprocess.Popen(['powershell', 'Get-NetAdapter', '|', 'select Name', '|', 'fl'], stdout = subprocess.PIPE)
    stdout, stdin = ps.communicate(timeout = 10)
    interfaces = []
    for i in stdout.split(b'\r\n'):
        if not i.strip():
            continue
        if i.find(b':')<0:
            continue
        name, value = [ j.strip() for j in i.split(b':') ]
        if name == b'Name':
            interfaces.append(value.decode('ascii')) # This fails for other users
    return interfaces

Andere Benutzer haben verschiedene Sprachen, alsovalue.decode('ascii') schlägt für einige von ihnen fehl. Z.B. Ein Benutzer berichtete, dass der Wechsel zudecode('ISO 8859-2') funktioniert gut für ihn (es ist also nicht UTF-8). Woher weiß ich, ob die an Powershell zurückgegebenen stdout-Bytes durch Codierung decodiert werden?

AKTUALISIERE

Nach einigen Experimenten bin ich noch verwirrter. Codepage in meiner Konsole, wie von @ zurückgegebchcp ist 437. Ich habe den Namen des Netzwerkadapters in einen Namen geändert, der Nicht-ASCII- und Nicht-CP437-Zeichen enthält. In interaktiver Powershell läuftGet-NetAdapter | select Name | fl hat den Namen korrekt angezeigt, auch wenn er kein cp437-Zeichen ist. Als ich Powershell von Python aus anrief, wurden Nicht-ASCII-Zeichen in nächstliegende ASCII-Zeichen konvertiert (z. B. à nach a, ž nach z) und.decode(ascii) hat gut funktioniert. Könnte dieses Verhalten (und die entsprechende Lösung) von der Windows-Version abhängen? Ich arbeite unter Windows 10, aber Benutzer können unter älteren Windows-Versionen bis Windows 7 arbeiten.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage