Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用子进程从标准输出读取数据时出现意外的额外反斜杠_Python 3.x_Subprocess_Hex_Stdout_Encode - Fatal编程技术网

Python 3.x 使用子进程从标准输出读取数据时出现意外的额外反斜杠

Python 3.x 使用子进程从标准输出读取数据时出现意外的额外反斜杠,python-3.x,subprocess,hex,stdout,encode,Python 3.x,Subprocess,Hex,Stdout,Encode,我有一个python源代码(名为source.py),它显示一些数据,如 b'testdata \xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00@\x00\...... 在终点站 我想获取这些信息并将其保存在变量中,因此我编写了以下代码: import subprocess batcmd= 'python3.8 source.py' result = subpro

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

b'testdata \xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00@\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-我无法编辑source.py!我不能操纵它,我们只能阅读 来自终端的数据

2-我最近使用了
\u w\u long\u
,然后我编辑了我的文章并 算法,所以如果你在评论中看到它,那是因为你忽略了它

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'\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\..."
因此,我希望在不做任何更改的情况下将该字符串转换为字节,我希望输出:

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\...
我试过:

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...
正如我们看到的,任何
\
都是重复的


如何解决这个问题?

:“Python维护人员保留在需要时以向后不兼容的方式修改封送格式的权利。”因此,在版本
X.Y
中封送的东西不能保证在版本
X.Y+1
中不可封送(反之亦然)。为什么您希望它在所有版本的Python中都能正常工作?是的,封送格式和算法正在改变,但是长库呢?这个库在python3.8及更高版本中不存在吗?
\u w\u long
是一个内部实现细节(可以通过前面的下划线看出)。它不保证会留下来,没有人会依赖它。这个脚本只获取标准输出,我已经使用了
子流程。请检查输出(batcmd,shell=True)
以获取它。我的问题是将这个获取的字符串转换为字节,并在`\`
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)