从 Python 访问的 Linux 命令(如 find)的输出中使用的编码是什么?

问题描述 投票:0回答:1

Python 提供了一个

subprocess
导入,允许对进程进行细粒度控制,但是当我在 Unix 中创建一个进程时,例如
find
,这些标准 Gnu 命令的输出编码是什么?

import subprocess
myProcess = subprocess.Popen(shlex.split('find ./dir -mindepth 1 -maxdepth 1 -type f -mtime +14'), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
outputs = myProcess.communicate()
myStdout = outputs[0].read()
myStderr = outputs[1].read()
print(myStdout.decode('utf-8/ascii')) # ???

我猜你可以逃脱解码,但正式地,我应该如何解释所有“将文本输出到控制台”的标准 Unix 命令的输出?

python unix encoding subprocess
1个回答
0
投票

编码不固定,取决于用户的语言环境。它通常是 UTF-8,这是大多数现代发行版的默认设置,但同样 - 用户可以更改它。

您可以在本地终端查看当前编码

$ locale charmap

要从 Python 获取它,您可以使用 locale.getpreferredencoding() 进行解码:

import locale

...

encoding = locale.getpreferredencoding()
print(myStdout.decode(encoding))
© www.soinside.com 2019 - 2024. All rights reserved.