如何阻止 AWS 用回车符替换换行符?

问题描述 投票:0回答:1

如果我使用 Python boto3 库使用

execute_command
在 AWS ECS 容器上运行命令(如此处所示),并且当我从 websocket 读取时,我的命令只是
echo -ne '\n'
(单个显式换行符)具有我的命令输出的流,输出为
b'\r\n'

对于生成文本输出的命令来说这并不是什么大问题,并且可以轻松修复,但如果我运行生成二进制输出的命令,这会损坏我的数据。虽然当我从 websocket 流中读取时,可以通过在客户端上将

\r\n
替换为
\n
来解决此问题,但发生的另一件事是字节
0xfd
0xfe
0xff
根本没有传输。这更难修复,因为无法知道这些字节是从哪里删除的。

我发现的唯一解决方法是将命令运行为

bash -c "echo -en '\n' | base64 -w0"
,并在收到命令后将其解码回二进制。这可行,但会使输出增大约 33%,对于像我正在处理的大型二进制数据,这会增加下载时间几分钟。

是什么导致了这些变化?有办法禁用这个吗?如果没有,是否有比 base64 更有效的解决方法?

python boto3 aws-sdk tty
1个回答
0
投票

你不需要。就做

output.replace(b'\r\n', b'\n')

尝试通过

execute_command
运行以下命令:

printf 'testing\r\ntesting'

您会注意到,在 websocket 流上,您将找到以下字节(由 python3 字节文字表示):

b'testing\r\r\ntesting'

这意味着,他们正在做一个简单的

output.replace(b'\n', b'\r\n')
,这是一个一二一映射。

© www.soinside.com 2019 - 2024. All rights reserved.