在ST3中使用Popen的奇怪输出

时间:2015-12-06 22:02:41

标签: python plugins sublimetext3 popen

我正在开发Sublime文本的插件,并且由于python的一些限制,我试图通过Popen获得json答案,我正确地收到了数据,但看起来Popen正在添加一些输出中的奇怪字符。

这是输出

(b'{"trink": {"id": "12"}}\r\n')

但应该是

{"trink": {"id": "12"}}

这就是我打电话的方式:

process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE,shell=True)
output = process.communicate()
print(output)

使用

output = process.communicate()[0]

仅从原始输出

中消失()

如何获得干净的输出?

我使用Sublime text 3 Build 3083 Windows 10-64b

1 个答案:

答案 0 :(得分:0)

ST论坛的用户回答我:

  

首先,这是100%的Python问题,与此无关   崇高文本。它也不是限制,而是一个功能。字面上。

     

首先,communication返回一个带有(stdout_data,stderr_data)的元组。   你很可能只需要stdout部分,所以你切片那个元组   与[0]

     

其次,默认情况下,通信返回的数据是一组   字节。如果你想要,请查看。字节用b表示   文字字符串的前面,可以使用转换为真正的字符串   它上面的.decode()方法,带有charset的参数。这个   可能是utf-8或cp1252或只是结果   locale.getpreferredencoding()。如果你使用了Popen   universal_newlines=True参数,Python会进行转换   为你自动。

     

最后,到目前为止,你所拥有的字符串附加了一个新行   最后,因为你使用的工具是如何做到的   输出。你必须用.strip()去除它,如果它是一个问题(因为   它的json,很可能不是。)

     

那么我们现在得到了什么?

process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, universal_newlines=True)
output = process.communicate()[0]#.strip()
print(output)