linux 将Python置于终端和shell之间

gg0vcinb  于 2023-04-29  发布在  Linux
关注(0)|答案(1)|浏览(120)

我的操作系统是Linux。我使用FISH shell与Alacritty终端仿真器。我想写一段Python代码,将终端一分为二,用“|”字符,并在两侧提示用户。有点像Tilix是怎么做的,我希望它都是文本的,因为我有一台旧PC,上面有Arch Linux,没有DE或WM,只有终端。我想在那里使用平铺功能。
我试过:os.system("fish")来提示用户,但我希望能够操作终端输出。使用Python线程库在后台运行命令,并不断读取命令输出,修改并输出给用户,这将是非常有用的。我试过:os.popen("echo hi").read()返回“hi\n”,但当我尝试os.popen("cmatrix")时,程序就挂起了。os.popen等待命令完成执行。我想在运行时获得输出。
有没有可能做到这一点?我最大的问题是阅读运行命令的输出。它不需要使用操作系统库。

s4n0splo

s4n0splo1#

不幸的是,注入这样的输出需要您充当终端。
一个原因是应用程序可以获得列和行中终端的大小,fish广泛使用它,以便它可以计算出它可以打印多少-是否有自动建议的空间(如果你打印太多,它会溢出到下一行,这会以有趣的方式中断),它需要在哪里开始正确的提示(如果有的话),等等。
另一个问题是,单独的应用程序将需要单独设置终端-这里的一件事是终端模式。比如“哪个字符标记文件结束”和“是否启用了流控制”(这就是当你按ctrl-s时冻结你的终端的原因,fish默认是禁用的)。这意味着这些应用程序应该有单独的终端来设置。
所以,你需要做的是使用类似于python的pty module的东西。这不是一项微不足道的任务。
由于您提供的关于您实际想要实现的目标的信息非常少,因此我们可以提供的最佳建议就是使用tmux-这就是tmux * 所做的 *。它运行在一个终端中,并允许您将窗口平铺成多个会话。

相关问题