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命令的输出“将文本输出到控制台”?
2条答案
按热度按时间pxy2qtax1#
编码不是固定的,取决于用户的语言环境。它通常是UTF-8,这是大多数现代发行版的默认设置,但同样-用户可以改变这一点。
您可以在本地终端中检查当前的编码
要从Python中获得它,您可以使用locale。getpreferredencoding():
o0lyfsai2#
这取决于几个因素。
第一个因素是关于你正在运行的程序:它有一个固定编码(或者你可以设置它,例如:例如在命令行中)。通常系统程序知道编码,但许多简单和肮脏的程序可能会忽略所有的编码。
第二个因素:区域设置编码(如系统所知)。该编码可以通过环境变量(例如例如
LANG_ALL
和LC_*
),或系统默认值,通常为C
(因此ASCII编码和英语)。注意:新用户的默认编码是不同的(它只是在正确的位置设置了如上所述的环境变量)。但是注意:终端/控制台必须能够解释编码。如果您将UTF-8字符串发送到只能使用8位字体的终端,您将看不到UTF-8文本(尽管该字符串可能是UTF-8)