是否可以在不影响其行为的情况下以编程方式读取另一个 pty / tty 的“stdout”?

Is it possible to programmatically read the `stdout` of another pty / tty without affecting its behavior?

我正在尝试以编程方式读取应用程序 运行ning 在特定 tmux 窗格中写入的输出,以便我可以确定何时从控制进程向它发送密钥。

特别想自动输入密码,但在确定密码提示出现之前不想输入。

我目前的尝试是使用tty找到控制tty,然后将其传递给pyserial尝试读取,因为它似乎可以读取tty 的。请注意,在实际应用中,我还有其他方法可以找出 tty.

不幸的是,一旦我 运行 下面的代码,目标 tmux 窗格立即关闭。

import serial
ser = serial.Serial('/dev/ttys013', timeout=1)

是否可以通过这种方式读取 pty?

我 运行 正在使用 OSX,但希望能有一个适用于 Linux 和 OSX 的解决方案。

通常,使用 python 你会使用 pexpect 来启动程序并通过 pty 与之交互,但如果你已经在 tmux 中有一个程序 运行 你可以简单地使用 tmux 的 pipe-pane 命令将写入屏幕的内容保存在文件中。例如,对于窗格编号 1,您可以给出 shell 命令:

tmux pipe-pane -t 1 'cat >/tmp/capture'

然后跟踪文件 /tmp/capture。 (使用 tmux pipe-pane -t 1 停止)。 为避免轮询,您可以改用 fifo。