I'm trying to store the output of powershell in a var:
import subprocess
subprocess.check_call("powershell \"Get-ChildItem -LiteralPath 'HKLM:SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall' -ErrorAction 'Stop' -ErrorVariable '+ErrorUninstallKeyPath'\"", shell=True, stderr=subprocess.STDOUT)
this way, using check_call, it prints ok, for example:
DisplayName : Skype™
but this way it only prints to screen, so i have to use
import subprocess
output = subprocess.check_output("powershell \"Get-ChildItem -LiteralPath 'HKLM:SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall' -ErrorAction 'Stop' -ErrorVariable '+ErrorUninstallKeyPath'\"", shell=True, stderr=subprocess.STDOUT)
but then, using check_output, i get:
DisplayName : SkypeT
how can i work around this?
The output is a of type
bytes
so you need to either decode it to a string with.decode('utf-8')
(or with whatever codec you want), or usestr()
, Example:The key here is to decode to whatever codec you want to use in order to produce the correct character when printing.
Following this post instructions:How to make Unicode charset in cmd.exe by default?
Its possible to bypass this encoding problem