【发布时间】:2017-03-04 18:52:27
【问题描述】:
我使用 libtmux,而 libtmux 使用 subprocess.Popen() 来调用 Tmux 来控制会话、窗口和窗格。要设置窗格标题,Tmux 需要发送一个转义序列。这可以按预期在命令行上运行:
tmux send-keys -t 0 " printf '\033]2;%s\033\\' 'Pane Title'" C-m
当这个命令由 subprocess.Popen() 或 os.system() 发出时——也可能是其他命令,我只测试了这两个——转义序列不会进入 shell。我记录了发送到文件的命令,并且日志文件中的值是正确的,但是当发送时只有这个存在:
printf '2;%s' 'Pane Title'
我已经通过执行以下命令对此进行了测试:
echo "printf '\033]2;%s\033\\' 'Pane Title'" > /tmp/setname
/tmp/setname的内容如上。
最终使用的方法是tmux_cmd,我通过send_keys这样称呼它:
p.send_keys("printf '\033]2;%s\033\\' '" + names[i] + "'")
其中“p”是窗格对象。请参阅我的帖子here。
我的问题是:如何在 Python 中发出带有转义序列的 shell 命令?
【问题讨论】:
-
你能告诉我们你的python代码吗?
-
您的转义序列中有错字:
]而不是[。 FWIW,使用os.system或subprocess向KDE konsole 终端发送转义序列没有问题。这是我的测试代码。import os, subprocesscmd = 'echo "this is \033[32mcoloured\033[0m text"'; os.system(cmd); subprocess.call(cmd, shell=True)。在 Python 2.6 和 3.6 上测试。 -
@PM2Ring 我想看看代码只是为了看看 OP 是否使用了原始前缀(在这种情况下不能使用)
-
@Jean-FrançoisFabre 当然,OP 的代码可能存在其他问题。所以我同意你的评论,这就是我赞成它的原因。 ;)
-
转义序列是正确的 - 它可以在命令行上运行,请参阅:github.com/tmux/tmux/issues/680 最后使用的方法是 tmux_cmd:github.com/tony/libtmux/blob/master/libtmux/common.py