Os.popen 奇怪的编解码器问题

问题描述

所以我尝试使用 os.popen 来运行 cmd 命令,但问题是大多数命令中都有西里尔字符,这似乎与 os.popen 存在一些问题。当我使用此代码

import os

stream = os.popen("dir")
output = stream.read()
print(output)

我得到这样的输出

enter image description here

我需要得到这样的输出

enter image description here

我也尝试使用子进程库来做到这一点,但使用子进程库要困难得多,而且我在很长一段时间后无法正确完成编码,所以如果可能的话,我真的想用 os 库来做到这一点。

>

解决方法

我不知道如何让 os.popen 使用特定的编码(我认为这不可能),所以这里是一个使用子进程的解决方案:

import subprocess

output = subprocess.run("dir",shell=True,encoding="cp866",stdout=subprocess.PIPE).stdout
print(output)

编辑:dir 是内建的 shell,因此您需要 shell=True,但您可以将列表参数用于普通命令。