Windows中的python print函数将\ n转换为\ r \ n。怎么预防?

时间:2014-11-13 10:32:30

标签: python pickle python-3.4

我有一个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

1 个答案:

答案 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))