【发布时间】:2013-05-04 23:39:33
【问题描述】:
我编写了一个简单的调试器程序,它可以执行控制台程序并将其输出发送到“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
【问题讨论】:
-
什么是“标准 .out 程序”,您如何“将其 IO 重定向到文件中”?输入肯定来自来自
.in文件吗?还是您正在处理流,将其同时发送到.in和 python 进程? -
一个标准的 .out 程序,在这种情况下,是一个使用 IO 的 std 文件描述符的程序。我将编辑我的问题以更准确地回答您的问题。
-
python.out 是 python 解释器。我将它从 user/bin 复制到我正在工作的目录中
标签: python linux stdio io-redirection