Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何在后台调用tmux_Python_Tmux - Fatal编程技术网

Python:如何在后台调用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

我试图从同一个python脚本调用tmux并控制tmux。它被困在tmux进程创建中,永远不会返回。如何创建流程(tmux)


问题的一部分在于,您在创建会话时就立即附加到会话(这需要一个终端;这可能就是为什么您试图直接运行
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向面板发送命令)->这是用于查看会话/面板创建后传递的命令列表所需的(附加);否则它就像它在后台做所有事情,用户不知道过去发生了什么。