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 命令的输出?
编码不固定,取决于用户的语言环境。它通常是 UTF-8,这是大多数现代发行版的默认设置,但同样 - 用户可以更改它。
您可以在本地终端查看当前编码
$ locale charmap
要从 Python 获取它,您可以使用 locale.getpreferredencoding() 进行解码:
import locale
...
encoding = locale.getpreferredencoding()
print(myStdout.decode(encoding))