使用子进程从stdout读取数据时出现意外的额外反斜杠



我有一个python源代码(名称为source.py(,它显示一些数据,如

b'testdata xe3x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x1fx00x00x00@x00......

在终端上。

我想得到这些信息并保存在一个变量上,所以我写了这个代码:

import subprocess
    
batcmd= 'python3.8 source.py'
result = subprocess.check_output(batcmd, shell=True)
print (result)

输出:

b'testdata \xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00@\x00\......

问题是任何都将复制2次

我该如何解决这个问题?

注意:

1-我无法编辑源.py!我不能操纵它,我们只能阅读来自终端的数据。

2-我最近使用了_w_long_,然后我编辑了我的帖子算法,所以如果你在评论中看到它,那是因为忽略了它。

3-存储的数据必须保留在字节

更新:

我也试过:

from contextlib import redirect_stdout
import io,os

res = os.popen("decompyle3 start.py.pyc").read()
print (res)
print (res.encode('latin1'))

在此代码:print(res)中,将在输出:中使用字符串类型打印此数据

"b'xe3x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x1fx00x00x00@x00x00x00sVx00x00x00ex00ex01dx00dx01x84x00dx02dx03dx03dx04dx05dx06dx07dx08dtdx03dx03dndx0bdx05dx0cdx08drdx0edx0cdx0fd..."

所以我想要将这个字符串转换为Byte而不做任何更改,我想要这个输出:

b'xe3x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x1fx00x00x00@x00x00x00sVx00x00x00ex00ex01dx00dx01x84x00dx02dx03dx03dx04dx05dx06dx07dx08dtdx03dx03dndx0bdx05dx0cdx08drdx0edx0cdx0fd...

我试过了:

print (res.encode('latin1'))

打印:

b'\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00@\x00\x00\x00sV\x00\x00\x00e\x00e\x01d\x00d\x01\x84\x00d\x02d\x03d\x03d\x04d\x05d\x06d\x07d\x08d\td\x03d\x03d\nd\x0bd\x05d\x0cd\x08d\rd\x0ed\x0cd\x0fd...

正如我们看到的任何重复!

如何解决这个问题?

from contextlib import redirect_stdout
import io,os
with io.StringIO() as buf, redirect_stdout(buf):
    os.system("python3.8 source.py")
    res = buf.getvalue()
    print(res)

最新更新