Изменение имени окна tmux с помощью Python

#python #fabric #tmux

#python #fabric #tmux

Вопрос:

Есть ли способ изменить tmux заголовок окна с python. Я использую fabric для автоматизации развертывания длительно выполняющихся заданий, поэтому я могу запускать задания в отключенном режиме в tmux . (возможно, это не fabric связанный вопрос, но я думаю, что люди, которые использовали fabric, могли столкнуться с этой проблемой) Я понимаю, что что-то вроде приведенного ниже может быть использовано для создания нового сеанса и запуска команд в этих сеансах.

 with Connection("ip") as cxn:
    cxn.run("tmux new -d -s session_name")
    cxn.run("tmux send -t session_name.0 ls ENTER")
  

Есть ли способ создать новое окно с определенным заголовком и вызвать его следующим образом:

 with Connection("ip") as cxn:
  if cxn.run("tmux has -t session_name", warn=True, hide="err").exited != 0:
     cxn.run("tmux new -d -s session_name")
  cxn.run("tmux new -d -s session_name -n windown_name")
  cxn.run("tmux send -t session_name.window_name ls ENTER")
  

Ответ №1:

Я не уверен, что это то, что вы хотите, но это создаст новый сеанс с именем «dev», и внутри этого сеанса он создаст заголовок окна «win1» и запустит python repl в этом окне.

 with Connection("ip") as cxn:
    cxn.run('''tmux new-session  -s "dev" -n "win1" ; send-keys 'python'  C-m  ;''')
  

Комментарии:

1. Похоже, что tmux не идентифицирует ни одно окно с именем — session_name.window_name . В нем есть только концепция номеров окон. Названия окон используются не для справки, а для того, чтобы пользователи могли идентифицировать окна.

Ответ №2:

Способ, которым tmux ссылается на имена окон, — двоеточие — : так что теперь это работает —

 with Connection("ip") as cxn:
  if cxn.run("tmux has -t session_name", warn=True, hide="err").exited != 0:
     cxn.run("tmux new -d -s session_name")
  cxn.run("tmux new-window -t session_name -n windown_name")
  cxn.run("tmux send -t session_name:window_name ls ENTER")
  

Без полного знания того, как tmux работает, трудно проработать такие детали. После прочтения руководства по написанию сценариев tmux здесь и углубления в код libtmux здесь (библиотека python для управления tmux ) Я подумал, что это : должно быть то, что нужно использовать, и это работает для меня.