背景故事:我有一个 CLI Python 应用程序。我希望能够在不干扰主应用程序 CLI 的情况下对其进行调试。Python 调试器允许您为调试器指定备用 stdin/stdout。
我在 tmux 中打开了一个新窗格,并记下了 pty 的文件名 (/dev/pts/47)。然后我打开该 pty 文件,用 Python 进行读写。这似乎是朝着正确的方向发展。tmux 窗格显示了 Python 调试器的一些输出,并响应了我输入的一些字母,但不是全部。我猜问题是 bash 仍在 pty 中运行,我的一些输入将发送到 bash,其他输入将发送到 Python,这取决于哪个程序首先从 pty 读取。
有没有办法让 tmux/screen/其他应用程序创建 pty,但不启动 shell,以便另一个应用程序可以接管 pty 的从属端?这有可能奏效吗?
是否有其他更合适的方法让程序打开第二个 CLI 界面?
(我尝试过的另一种方法是使用 mkfifo 创建两个命名管道,然后cat >/tmp/pipe_stdin | cat </tmp/pipe_stdout
。这种方法可行,但是是行缓冲的,因此行编辑不起作用。)
答案1
如果我正确理解了您的问题(我没有调试 Python 的经验),乍一看,最简单的方法是使用 2 个 shell 窗口。
在其中一个窗口中运行调试器(带有要调试的应用程序),并将调试器的输入/输出重定向到第二个窗口。
然后,您可以在第二个 shell 中控制调试器并观察其输出,而不会影响第一个 shell 中的输出。