我正在开发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
答案 0 :(得分:0)
ST论坛的用户回答我:
首先,这是100%的Python问题,与此无关 崇高文本。它也不是限制,而是一个功能。字面上。
首先,communication返回一个带有(stdout_data,stderr_data)的元组。 你很可能只需要stdout部分,所以你切片那个元组 与
[0]
。其次,默认情况下,通信返回的数据是一组 字节。如果你想要,请查看。字节用
b
表示 文字字符串的前面,可以使用转换为真正的字符串 它上面的.decode()方法,带有charset的参数。这个 可能是utf-8或cp1252或只是结果locale.getpreferredencoding()
。如果你使用了Popenuniversal_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)