Python ST3中使用Popen的怪异输出

Python ST3中使用Popen的怪异输出,python,plugins,sublimetext3,popen,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=subproces

我正在为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)

仅从原始输出中消失()

如何获得干净的输出

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

ST论坛中的用户回答我:

首先,这100%是Python的问题,与此无关 崇高的文本。这也不是一个限制,而是一个特性。真的

首先,Communication返回一个元组(stdout_数据、stderr_数据)。 您很可能只需要stdout部分,因此可以对该元组进行切片 使用
[0]

其次,默认情况下,通信返回的数据是一组 字节。如果你想的话,可以查一下。字节用中的
b
表示 文本字符串的前面,可以使用 方法,其中包含字符集的参数。这 可能是utf-8或cp1252,或者只是
locale.getpreferredencoding()
。如果你用Popen和
universal\u 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)
process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, universal_newlines=True)
output = process.communicate()[0]#.strip()
print(output)