windows中的python打印函数将\n转换为\r\n。如何预防呢?

标签 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 运行上面的脚本并使用 communications 获取 pickled 输出

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_....

这会导致取消 pickle 时出现问题。我无法替换出现的情况,因为它是二进制字符串。我该如何解决这个问题?

PS:我使用的是python 3.4

最佳答案

知道如何删除从 \n\r\n 的转换。

但是您可以对其进行编码和解码,这样就没有空格或者它们无关紧要。

import base64
byte_array = pickle.dumps(result)
print(base64.b64encode(byte_array))

然后您需要恢复编码。

import base64
obj = pickle.loads(base64.b64decode(output))

关于windows中的python打印函数将\n转换为\r\n。如何预防呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906744/

相关文章:

互联网连接中断的 Python 的 urllib.request.urlopen

python-3.4 - Python 3.X Unix 套接字示例

python - 文件对象中的rb和r+b模式有什么区别

python - 我们可以用 python 生成器读取 pickle 文件中的数据吗

python - 在 Python 中序列化/反序列化类对象的最佳方法是什么?

python - 使用 Python 匹配文件中的数字

python - 如何通过另一个python文件运行一个python文件,然后关闭第一个文件

python - 将列表中的字典键从 unicode 编码为 ascii

python - 如何在 PyPy 上使用 Biopython?

python - 涉及带有管道的子进程的映射步骤在 PySpark 中失败