我编写了一个简单的调试器程序,它可以执行控制台程序并将其输出发送到“out”和“err”文件,并从“in”文件中检索其输入。现在,我想扩展它的功能来运行 Python 脚本。为此,我想我可以让调试器只运行 Python 解释器并将 Python 解释器与文件接口。
但是当我在调试器中运行 Python 解释器时,我看不到任何输出,就像使用普通程序一样。调试器有非常详细的错误日志,我在错误日志文件中看不到任何错误。
我使用了“ps -A”,但调试器似乎已经启动了 Python 解释器,原因有两个:1)进程 ID 相差 1 和 2)调试器在我杀死 -9 python 解释器后立即退出(即说明文件描述符已连接)。这是 ps -All 的输出:
1 R 0 1565 1 88 80 0 - 1040 - pts/0 00:01:45 debugger
0 S 0 1566 1565 0 80 0 - 7782 pipe_w pts/0 00:00:00 python.out
调试器是这样启动的(python.out 是 python 解释器的副本):
debugger python.out
所以我想我的问题是,有谁知道为什么这不起作用?Python 解释器对它的标准文件描述符做了什么奇怪的事情吗?
编辑:
我还注意到 python.out 无法使用 python.out > out_file 重定向其 IO - 这可能与调试器遇到的问题有关,也可能无关。
调试器不使用块缓冲。
以下是来自 /proc/pid/io 的一些 io 信息:
调试器(我将一些长度为 21 的数据写入“in”文件)
rchar: 21
wchar: 21
syscr: 300222462
syscw: 1
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0
Python 解释器
rchar: 517268
wchar: 0
syscr: 93
syscw: 0
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0