Я пытаюсь написать сценарий оболочки в Python для автоматизации процесса, но одной из команд, которые мне нужно использовать, является Ctrl + A (я использую экран). Есть ли способ записать это в скрипт?
Благодарю.
Нет. Вы не сможете контролировать screen
программу с помощью программы/скрипта python.
В сценарии bash я могу сделать что-то вроде:
if [-n "$STY"]; then
screen -X command
fi
Это настройки экрана $ STY, см., Если он установлен, чтобы определить, находитесь ли вы на экране. Затем отправьте команду, которую вы хотите, используя флаг -X
экрана. Вы можете легко сделать то же самое в Python.
На самом деле, кажется, что screen -X command
просто screen -X command
ошибками, если не на экране, поэтому вы можете даже использовать его, не проверяя $STY
Gnu-Screen: запустить сценарий, который отправляет команды на сеанс экрана, который выполняется в
Код ASCII для CTRL_A равен 1. Таким образом, будет работать следующий код python.
CTRL_A = chr(1)
Хорошо, это будет сложно. Как комментирует Pablo Santa Cruz, ваш скрипт работает в сеансе экрана, поэтому нормальный интерфейс stdin/stdout/stderr с миром не будет работать, поскольку экран не прослушивает Ctrl-A на любом из этих дескрипторов.
Но еще не все потеряно. Экран прослушивает Ctrl-A на его stdin, так как ваша клавиатура Ctrl-A доходит до вас. (Следующее предполагает Linux, но я уверен, что у других Unices есть что-то подобное...) Во-первых, ваш скрипт должен будет вычислить pid его родительского экрана (может помочь библиотека psutil). Затем вы найдете каталог /proc/{pid}/fd
содержащий файлы, соответствующие filenos всех дескрипторов файлов, которые были открыты. Для нормальных процессов unix '0' - stdin, '1' - stdout, '2' - stderr. Предполагая правильные разрешения пользователей, ваш скрипт должен иметь возможность открывать /proc/{pid}/fd/0
и записывать Ctrl-A в файл, имитируя нажатия пользователем клавиши.
Я не совсем уверен, что это сработает, но никогда не пробовал, но если вам нужно командовать экраном из подпроцесса, некоторым вариантом этого, вероятно, будет ваш лучший выбор.
Модуль curses
Python может помочь вам в некоторых. :)