在终端间循环并执行命令的bash或python命令?

3 投票
4 回答
877 浏览
提问于 2025-04-16 23:59

简单来说,我遇到的问题是:我正在用两个bash终端连接到两个服务器,并在这些服务器上运行程序,我需要不断查看它们的输出。Server1的输出在terminal1上显示,而Server2的输出在terminal2上显示。

我想知道有没有办法运行一个脚本,它能知道有多少个终端是打开的,并且能够在这些终端之间切换,执行bash命令。

伪代码:

open terminal1
run program1
open terminal2
run program2
switch to terminal1
run program3 on terminal1

我查看了xterm的手册,但没有找到可以在终端之间切换的选项。
我找到的最接近的东西是这个这个,但都没有帮助。

4 个回答

2

一个可以替代 screen 的工具是 tmux。当你把屏幕分割成你需要的样子后,你可以从一个单独的终端向任意一个屏幕发送命令,像这样:

tmux send-keys -t sessionname:0.0 "ls -al" "Enter"
tmux send-keys -t sessionname:0.1 "ls -al" "Enter"

这里的 -t 选项是用来指定“会话名:窗口编号:面板编号”。我觉得你在 screen 中也可以做类似的事情,不过我自己没有用过。

如果你觉得有两个独立的屏幕不是特别重要,你还可以考虑使用一个叫 fabric 的 Python 工具。这个工具可以让你编写脚本,向多个服务器发送命令并获取结果。

3

当然可以!请看下面的内容:

这段代码是用来处理某种特定任务的。它可能涉及到一些数据的输入、处理和输出。具体来说,代码的每一部分都有它的作用,比如获取用户输入、进行计算或者显示结果。

如果你是编程新手,可能会觉得这些代码看起来有点复杂,但其实只要一步一步理解,每一行代码的意思就会变得清晰起来。比如,某些函数可能是用来执行特定操作的,而变量则是用来存储数据的。

总之,理解代码的关键在于分解它,逐行分析,弄清楚每一部分在做什么。这样,你就能更好地掌握整个程序的逻辑了。

In [5]: import subprocess

In [6]: import shlex

In [7]: subprocess.Popen(shlex.split('gnome-terminal -x bash -c "ls; read -n1"'))
Out[7]: <subprocess.Popen object at 0x9480a2c>
2

screen 是一个工具,可以让你在一个窗口里同时运行多个程序。想象一下,你在电脑上打开了很多个小窗口,每个窗口里都在做不同的事情。这个工具就像是一个超级窗口管理器,帮助你更方便地切换和管理这些程序。

撰写回答