捕获直接重定向到/ dev / tty

时间:2008-11-20 21:58:09

标签: linux terminal tty

我正在为一个将文本直接吐出到/ dev / tty的程序的应用程序控制器工作。

这是一个生产应用程序控制器,必须能够捕获所有发送到终端的文本。通常,这不是问题。我们只是重定向stdout和stderr。此特定应用程序直接调用echo并将结果重定向到/ dev / tty(echo "some text" > /dev/tty)。通过我的应用程序控制器重定向无法捕获文本。

我确实拥有此应用程序的源代码,但我无法修改它,也不再进行维护。关于如何捕获和/或丢弃输出的任何想法?

4 个答案:

答案 0 :(得分:4)

 screen -D -m yourEvilProgram

应该有效。很多时间过去了,我使用它,但如果你需要阅读它的一些输出,你甚至可以利用一些套接字来读它。

[已添加:两个链接,RackaidPixelbeat,主页位于GNU]

答案 1 :(得分:3)

控制这样的应用程序的经典解决方案是Expect,它设置伪终端,记录并从脚本驱动受控应用程序。它附带了大量的示例脚本,因此您可以根据需要调整一个脚本。

答案 2 :(得分:3)

这就是我在python中所做的

import pty, os

pid, fd = pty.fork()
if pid == 0: # In the child process execute another command
    os.execv('./my-progr', [''])
    print "Execv never returns :-)"
else:
    while True:
        try:
            print os.read(fd,65536),
        except OSError:
            break

答案 3 :(得分:2)

我无法确定@flolo提到的screen程序是否能满足您的需要。它可能,但我不确定是否内置了一个日志工具,这似乎是你需要的。

可能已经有一个程序可以满足您的需求。我提名sudosh作为一种可能性。

如果您最终需要自己编写,您可能需要使用伪tty(pty)并让您的应用程序控制器位于用户的真实终端连接和pty设备之间,它可以在其中记录无论你需要它来记录。这不是微不足道的。您可以在Rochkind的“Advanced UNIX Programming, 2nd Edn”一书中找到有关此内容的信息,毫无疑问其他类似的书籍(史蒂文斯的“UNIX环境中的高级编程”一书很可能是候选人,但我没有副本来验证这一点)。