【问题标题】:Catching a direct redirect to /dev/tty捕获到 /dev/tty 的直接重定向
【发布时间】:2008-11-20 21:58:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux terminal tty


    【解决方案1】:
     screen -D -m yourEvilProgram
    

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

    [添加:两个链接,RackaidPixelbeat,主页在 GNU]

    【讨论】:

      【解决方案2】:

      控制此类应用程序的经典解决方案是Expect,它设置伪终端、记录日志并通过脚本驱动受控应用程序。它附带了许多示例脚本,因此您可以根据需要调整其中的一个。

      【讨论】:

        【解决方案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
        

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-14
            • 1970-01-01
            • 1970-01-01
            • 2013-11-02
            • 1970-01-01
            相关资源
            最近更新 更多