os.system() 和 subprocess.Popen() 终止 Python 中的转义序列
os.system() and subprocess.Popen() kill escape sequences in Python
我使用 libtmux,libtmux 使用 subprocess.Popen() 调用 Tmux 来控制 session、windows 和窗格。要设置窗格标题,Tmux 需要发送转义序列。这按预期在命令行上工作:
tmux send-keys -t 0 " printf '3]2;%s3\' 'Pane Title'" C-m
当此命令由 subprocess.Popen() 或 os.system() 发出时 - 也可能是其他命令,我只测试了这两个 - 转义序列不会进入 shell。我记录了发送到一个文件的命令,日志文件中的值是正确的,但是当发送时只有这个仍然存在:
printf '2;%s' 'Pane Title'
我已经通过执行以下命令对此进行了测试:
echo "printf '3]2;%s3\' 'Pane Title'" > /tmp/setname
/tmp/setname内容如上
最终使用的方法是tmux_cmd and I call it via send_keys这样的:
p.send_keys("printf '3]2;%s3\' '" + names[i] + "'")
其中 "p" 是窗格 object。看我的 post here.
我的问题是:如何在 Python 中发出带有转义序列的 shell 命令?
"raw prefixes" 是我错过的!谢谢Jean-François Fabre!
这个有效:
p.send_keys(r"printf '3]2;%s3\' '" + names[i] + "'")
我使用 libtmux,libtmux 使用 subprocess.Popen() 调用 Tmux 来控制 session、windows 和窗格。要设置窗格标题,Tmux 需要发送转义序列。这按预期在命令行上工作:
tmux send-keys -t 0 " printf '3]2;%s3\' 'Pane Title'" C-m
当此命令由 subprocess.Popen() 或 os.system() 发出时 - 也可能是其他命令,我只测试了这两个 - 转义序列不会进入 shell。我记录了发送到一个文件的命令,日志文件中的值是正确的,但是当发送时只有这个仍然存在:
printf '2;%s' 'Pane Title'
我已经通过执行以下命令对此进行了测试:
echo "printf '3]2;%s3\' 'Pane Title'" > /tmp/setname
/tmp/setname内容如上
最终使用的方法是tmux_cmd and I call it via send_keys这样的:
p.send_keys("printf '3]2;%s3\' '" + names[i] + "'")
其中 "p" 是窗格 object。看我的 post here.
我的问题是:如何在 Python 中发出带有转义序列的 shell 命令?
"raw prefixes" 是我错过的!谢谢Jean-François Fabre!
这个有效:
p.send_keys(r"printf '3]2;%s3\' '" + names[i] + "'")