Python没有从subprocess.check_call获取原始二进制文件

Gre*_*reg 6 python unicode subprocess python-2.7

如何让subprocess.check_call给我一个命令的原始二进制输出,它似乎在某处错误地编码.

细节:

我有一个返回如下文本的命令:

some output text “quote” ...
Run Code Online (Sandbox Code Playgroud)

(那些报价是unicode e2809d)

这是我如何调用命令:

f_output = SpooledTemporaryFile()
subprocess.check_call(cmd, shell=True, stdout=f_output)
f_output.seek(0)
output = f_output.read()
Run Code Online (Sandbox Code Playgroud)

问题是我明白了:

>>> repr(output)
some output text ?quote? ...
>>> type(output)
<str>
Run Code Online (Sandbox Code Playgroud)

(如果我把'ord'称为'?'我得到63.)我在Linux上使用Python 2.7.

注意:在OSX上运行相同的代码对我来说是正确的.问题是我在Linux服务器上运行它.

Gre*_*reg 1

哇,这是有史以来最奇怪的问题,但我已经解决了!

事实证明,它所调用的程序(一个 java 程序)根据调用的位置返回不同的编码!

Dev osx 机器,很好地返回字符,从命令行的 Linux 服务器,很好地返回字符,从 Django 应用程序调用,没有变成“?”。

为了解决这个问题,我最终将此参数添加到命令中:

-Dfile.encoding=utf-8
Run Code Online (Sandbox Code Playgroud)

我在这里想到了这个想法,而且似乎可行。还有一种方法可以在内部修改 Java 程序来实现此目的。

抱歉,我把责任归咎于Python!你们的想法是正确的。