我正在尝试制作一个与Windowsshell交互的程序,所以我尝试了以下命令:
output = subprocess.run('ipconfig', stdout = subprocess.PIPE)
output.stdout
output = os.popen('ipconfig','r',1).read()
但一些输出(俄语(以十六进制 (ASCII( 表示:
Wireless LAN adapter x81xa5xe1xafxe0xaexa2xaexa4xadxa0xef xe1xa5xe2xec 4:
应该是
Wireless LAN adapter Беспроводная сеть 4:
我需要所有输出信息都是文本。
顺便说一句,当我在写入模式下使用os.popen('ipconfig', 'w'(时,输出是正确的,没有十六进制值,只有文本,但我无法将其保存为整数。
有些已经问过的问题,我发现...
哪种编码使用 \x(反斜杠 x(前缀?
在 Python 3 中解码十六进制字符串
谢谢4个帮助!
试试这个
output.decode('cp866')
子进程的输出应该是一个bytes
对象(在 Python 3 中(,使用您的示例:
b'Wireless LAN adapter x81xa5xe1xafxe0xaexa2xaexa4xadxa0xef xe1xa5xe2xec 4:'.decode('cp866')
> 'Wireless LAN adapter Беспроводная сеть 4:'
通常,您需要知道系统正在使用哪种编码,cp866
用于俄语,请检查 https://docs.python.org/3/library/codecs.html#standard-encodings
您还可以使用
sys.getdefaultencoding()
如果匹配,您甚至不需要在调用bytes.decode
时指定它。