我有一个python进程(例如abc.py),它打印一个latin1编码的pickle输出,其中包含\n
这是生成二进制pickle输出的代码
byte_array = pickle.dumps(result)
#Windows uses utf-8 encoding by default
# http://stackoverflow.com/a/4374457/2073595
# http://stackoverflow.com/a/26220050/1873328
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='latin-1')
print(byte_array.decode('latin-1'), end='', flush=True)
输出格式如下
...00USR_RDER_TYPEq\x06X\n\x00\x00\x00VERSION_.....
请注意,此二进制字符串包含\ n
我有另一个sublime插件,它使用suprocess.Popen运行上面的脚本并使用通信获取pickle输出
db_process = subprocess.Popen('python -u abc.py',stdout=subprocess.PIPE,cwd=scripts_folder,shell=True,universal_newlines=False)
try:
output, errs = db_process.communicate(timeout=15)
except TimeoutExpired:
db_process.kill()
output, errs = db_process.communicate()
#unpickle the output
obj = pickle.loads(output)
我的问题是,在变量output
中,\n
更改为\r\n
,即上面的pickle输出将被接收为
...00USR_RDER_TYPEq\x06X\r\n\x00\x00\x00VERSION_....
这会导致非酸洗问题。我无法替换出现的二进制字符串。我该如何解决这个问题?
PS:我正在使用 python 3.4
答案 0 :(得分:2)
我不知道如何删除从\n
到\r\n
的转换。
但是你可以编码和解码它,这样就没有空格或者它们无关紧要。
import base64
byte_array = pickle.dumps(result)
print(base64.b64encode(byte_array))
然后你需要恢复编码。
import base64
obj = pickle.loads(base64.b64decode(output))