Python:如何在后台调用tmux
我试图从同一个python脚本调用tmux并控制tmux。它被困在tmux进程创建中,永远不会返回。如何创建流程(tmux)Python:如何在后台调用tmux,python,tmux,Python,Tmux,我试图从同一个python脚本调用tmux并控制tmux。它被困在tmux进程创建中,永远不会返回。如何创建流程(tmux) 问题的一部分在于,您在创建会话时就立即附加到会话(这需要一个终端;这可能就是为什么您试图直接运行bash,而不是tmux)。您应该能够简单地使用-d选项启动会话,以避免附加到会话 def __init__(self, session_name, param): self.name = session_name self.p = subprocess.Pop
问题的一部分在于,您在创建会话时就立即附加到会话(这需要一个终端;这可能就是为什么您试图直接运行
bash
,而不是tmux
)。您应该能够简单地使用-d
选项启动会话,以避免附加到会话
def __init__(self, session_name, param):
self.name = session_name
self.p = subprocess.Popen(['tmux', 'new', '-d', '-s', session_name])
对于其他方法,您也应该使用
子流程
,而不是os.system
问题的一部分是,您在创建会话时就立即附加到会话(这需要终端;这可能是您试图运行bash
而不是直接运行tmux
的原因)。您应该能够简单地使用-d
选项启动会话,以避免附加到会话
def __init__(self, session_name, param):
self.name = session_name
self.p = subprocess.Popen(['tmux', 'new', '-d', '-s', session_name])
您还应该对其他方法使用
subprocess
,而不是os。system
模块libtmux非常适合您的情况,因此您可以直接在Python中操作tmux
例如,你可以
import libtmux
server = libtmux.Server()
session = server.find_where({"session_name": "session_test"})
session = server.new_session(session_name="session_test", kill_session=True, attach=False)
window = session.new_window(attach=True, window_name="session_test")
pane1 = window.attached_pane
pane2 = window.split_window(vertical=False)
window.select_layout('even-horizontal')
pane1.send_keys('ls -al')
pane2.send_keys('ls -al')
server.attach_session(target_session="session_test")
模块libtmux非常适合您的情况,因此您可以直接在Python中操作tmux 例如,你可以
import libtmux
server = libtmux.Server()
session = server.find_where({"session_name": "session_test"})
session = server.new_session(session_name="session_test", kill_session=True, attach=False)
window = session.new_window(attach=True, window_name="session_test")
pane1 = window.attached_pane
pane2 = window.split_window(vertical=False)
window.select_layout('even-horizontal')
pane1.send_keys('ls -al')
pane2.send_keys('ls -al')
server.attach_session(target_session="session_test")
通过将
&
添加到命令中,您可以了解UNIX后台进程,对吗?subprocess.Popen(['/bin/bash','-c',tmux new-s%s&'%session\u name])====>错误:打开终端失败:不是终端您介意在这里给出一个示例,修改上述代码吗?这里不需要使用bash
;只需使用Popen(['tmux','new','s','session_name])
。(这也更安全,因为您当前没有在shell命令行中正确引用会话名称。)为什么不试试Python中的tmux库呢?通过将&
添加到命令中,您可以了解UNIX后台进程,对吗?subprocess.Popen(['/bin/bash','-c',tmux new-s%s&'%session\u name])====>错误:打开终端失败:不是终端您介意在这里给出一个示例,修改上述代码吗?这里不需要使用bash
;只需使用Popen(['tmux','new','s','session_name])
。(这也更安全,因为您当前没有在shell命令行中正确引用会话名称。)为什么不试试Python中的tmux库呢?谢谢大家,问题如下:谢谢大家,问题如下:谢谢你们的回复。我的问题如下:1/附加了会话(tmux attach-t..)2/之后无法从同一脚本向tmux会话/面板发送cmd(否则需要另一个shell向面板发送命令)->这是用于查看会话/面板创建后传递的命令列表所需的(附加);否则它就像它在后台做所有事情,用户不知道过去发生了什么。谢谢你的回复。我的问题如下:1/附加了会话(tmux attach-t..)2/之后无法从同一脚本向tmux会话/面板发送cmd(否则需要另一个shell向面板发送命令)->这是用于查看会话/面板创建后传递的命令列表所需的(附加);否则它就像它在后台做所有事情,用户不知道过去发生了什么。