Команда bash или python для переключения между терминалами и выполнения команд на них? - PullRequest
3 голосов
/ 20 августа 2011

Излагаю проблему в упрощенной форме: я использую два сервера, использующих два терминала bash, и запускаю программы на серверах, результаты которых мне нужно постоянно просматривать.Выход Server1 отображается на терминале 1, а выход Server2 - на терминале 2.

Есть ли способ запустить скрипт, который знает, сколько терминалов открыто, и может циклически проходить через них и выполнять над ними команды bash?

Псевдокод:

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

Посмотрел справочную страницу для xterm, но не было возможности переключаться между терминалами.
Ближайшее, что я мог получить, было this и это .Но оба не помогли.

Ответы [ 4 ]

3 голосов
/ 20 августа 2011
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 голосов
/ 20 августа 2011

Альтернативой screen будет tmux .Как только вы разделите свои экраны так, как вам нужно, вы можете отправлять команды на любой из них с отдельного терминала, например:

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

Опция -t ссылается на "sessionname": "номер окна". "Номер панели».Я полагаю, что вы можете сделать то же самое с screen, но я никогда не использовал его.

Другой вариант, который вы могли бы рассмотреть, если наличие двух отдельных экранов не очень уместно, это утилита python fabric.Вы можете записывать команды на несколько серверов и получать результаты.

2 голосов
/ 20 августа 2011
1 голос
/ 07 июля 2016

Создание сценария bash, который запускает screen, было решением для меня в аналогичном случае.Вы можете использовать screen для создания сеанса экрана и внутри, создавать несколько пронумерованных окон и выполнять команды для них.

Я запускаю сценарий в кластере с 8 компьютерами, поэтому я ssh вкаждого из них и выполните команду htop, чтобы проверить, не использует ли это никто.

Флаг -S называет сеанс на экране, -p перечисляет окно сеанса, а -X stuff запускает команду,Обратите внимание, что для запуска команды " необходима новая строка для имитации возврата каретки (Enter)

Вот скрипт

#!/bin/bash
screen -d -m -S dracos
# window 0 is created by default, command ssh is executed " needed in new line to simulate pressing Enter
screen -S dracos -p 0 -X stuff "ssh draco1
"
screen -S dracos -p 0 -X stuff "htop
"
for n in {2..8}; do
  # create now window using `screen` command
  screen -S dracos -X screen $n
  #ssh to each draco
  screen -S dracos -p $n -X stuff "ssh draco$n
"
  #run htop in each draco
 screen -S dracos -p $n -X stuff "htop
"
screen -S dracos -p $n -X stuff "<your_new_command_here>
"
done

Если вы хотите запустить команды вВ другом порядке вы можете поставить строку ниже после for

screen -S dracos -p $n -X stuff "<your_new_command_here>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...