ssh:发送包含 RETURN 的 tmux 命令

ssh: sending a tmux command containing RETURN

我有一个服务器 运行ning 我有一个 tmux 会话 运行ning.

如果我登录到服务器,我可以运行

tmux send-keys -t mysess "list^M"

注意^M!我通过 CTRL-V 键入它,然后在 bash 中输入 Return。这会将 return 密钥发送到 tmux 会话。

现在,我也可以通过 ssh 发送命令来做同样的事情:

ssh myfancyserver tmux send-keys -t mysess "list^M"

一切顺利。

但是,现在我想在 python 中做同样的事情。 运气不好!

我试过了

subprocess.check_output(
    'ssh myfancyserver tmux send-keys -t mysess "list\x10"')

因为I read 10 是换行符。运气不好!

我尝试在 python 源中使用 CTRL-V 和 Return 输入换行符,但这会破坏文件。

我还用 paramiko 尝试了一些东西,包括使用 channel.sendexec_command - 都不走运。


我的感觉是换行符在传输过程中丢失了?

^M (CR) 是 \x0d,而不是 \x10^J 又名 LF 是 [=14=]x0a,所以两者都不是)。在 Python 中,您还可以用 \r 表示它,这可能更具可读性并且更不容易出错。

根据http://jkorpela.fi/chars/c0.html\x10(DLE)的意思是

A transmission control character which will change the meaning of a limited number of contiguously following characters. Its [sic] is used exclusively to provide supplementary data transmission control functions. Only graphic characters and transmission control characters can be used in DLE sequences.

LF十进制为10;也许您对基地感到困惑。 \x表示后面两位数为十六进制。 (然后 CR 将是 13,而不是 10。)