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服务器上运行它.
哇,这是有史以来最奇怪的问题,但我已经解决了!
事实证明,它所调用的程序(一个 java 程序)根据调用的位置返回不同的编码!
Dev osx 机器,很好地返回字符,从命令行的 Linux 服务器,很好地返回字符,从 Django 应用程序调用,没有变成“?”。
为了解决这个问题,我最终将此参数添加到命令中:
-Dfile.encoding=utf-8
Run Code Online (Sandbox Code Playgroud)
我在这里想到了这个想法,而且似乎可行。还有一种方法可以在内部修改 Java 程序来实现此目的。
抱歉,我把责任归咎于Python!你们的想法是正确的。
归档时间: |
|
查看次数: |
696 次 |
最近记录: |