6

我正在为将文本直接发送到 /dev/tty 的程序开发应用程序控制器。

这是一个生产应用程序控制器,它必须能够捕获到终端的所有文本。一般来说,这不是问题。我们只是重定向标准输出和标准错误。这个特殊的应用程序直接调用 echo 并将结果重定向到 /dev/tty ( echo "some text" > /dev/tty)。通过我的应用程序控制器重定向无法捕获文本。

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

4

4 回答 4

4
 screen -D -m yourEvilProgram

应该管用。自从我使用它以来已经过了很多时间,但是如果您需要读取它的一些输出,甚至可以使用一些套接字来读取它。

[添加:两个链接,RackaidPixelbeat ,以及GNU的主页]

于 2008-11-20T23:51:23.533 回答
3

控制此类应用程序的经典解决方案是Expect,它设置伪终端、记录日志并从脚本驱动受控应用程序。它附带了许多示例脚本,因此您可能只需要调整一个来满足您的需求。

于 2009-09-11T09:39:52.210 回答
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
于 2010-11-01T21:34:44.623 回答
2

我不能完全确定screen@flolo 提到的程序是否会满足您的需求。可能,但我不确定是否有内置的日志记录工具,这似乎是您需要的。

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

如果您最终需要编写自己的,您可能需要使用伪 tty (pty) 并让您的应用程序控制器位于用户的真实终端连接和 pty 设备之间,在那里它可以记录您需要的任何内容它记录。这不是微不足道的。您可以在 Rochkind 的“ Advanced UNIX Programming, 2nd Edn ”一书中找到有关这方面的信息,毫无疑问还有其他类似的书籍(Stevens 的“Advanced Programming in the UNIX Environment”一书可能是候选者,但我没有副本验证)。

于 2008-11-21T01:13:00.610 回答