s sh: отправка команды tmux, содержащей RETURN - PullRequest
1 голос
/ 13 января 2020

У меня работает сервер, на котором запущен сеанс tmux.

Если я вошел на сервер, я могу запустить

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

Обратите внимание на ^M ! Я набираю это, нажимая CTRL-V, а затем возвращаю bash. Это отправляет ключ возврата в сеанс tmux.

Теперь я могу сделать то же самое, отправив команду через s sh:

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

Все хорошо.

Однако теперь я хочу сделать то же самое в python. Не повезло!

Я пытался

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

Поскольку Я прочитал , что 10 - это перевод строки. Не повезло!

Я попытался ввести новую строку с помощью CTRL-V и Return в исходном коде python, но это сломало файл.

Я также попробовал некоторые вещи с помощью paramiko, в том числе channel.send и exec_command - обоим не повезло.


Мне кажется, что новая строка теряется где-то вдоль передачи?

1 Ответ

1 голос
/ 13 января 2020

^M (CR) равно \x0d, а не \x10^J aka LF равно \0x0a, так что на самом деле это ни то, ни другое). В Python вы также можете представить его с помощью \r, который, вероятно, более читабелен и менее подвержен ошибкам.

Согласно http://jkorpela.fi/chars/c0.html значение \x10 (DLE ) - это

Символ управления передачей, который изменит значение ограниченного числа непрерывно следующих символов. Его [sic] используется исключительно для обеспечения дополнительных функций управления передачей данных. В последовательностях DLE могут использоваться только графические символы c и символы управления передачей.

LF - 10 в десятичном виде; может быть, ты запутался насчет базы. \x означает, что следующие две цифры шестнадцатеричные. (Тем не менее, тогда CR будет 13, а не 10.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...