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