gpt4 book ai didi

Windows 中的 python 打印函数将\n 转换为\r\n。如何防止这种情况?

转载 作者:太空宇宙 更新时间:2023-11-04 03:40:07 27 4
gpt4 key购买 nike

我有一个 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 来运行上面的脚本并使用 communicate 获取 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com