Помещение «Ctrl-A» в скрипт оболочки Python

1

Я пытаюсь написать сценарий оболочки в Python для автоматизации процесса, но одной из команд, которые мне нужно использовать, является Ctrl + A (я использую экран). Есть ли способ записать это в скрипт?

Благодарю.

Теги:
screen

5 ответов

1

Нет. Вы не сможете контролировать screen программу с помощью программы/скрипта python.

  • 0
    Хм ... я этого боялась.
1

В сценарии bash я могу сделать что-то вроде:

if [-n "$STY"]; then
    screen -X command
fi

Это настройки экрана $ STY, см., Если он установлен, чтобы определить, находитесь ли вы на экране. Затем отправьте команду, которую вы хотите, используя флаг -X экрана. Вы можете легко сделать то же самое в Python.

На самом деле, кажется, что screen -X command просто screen -X command ошибками, если не на экране, поэтому вы можете даже использовать его, не проверяя $STY

Gnu-Screen: запустить сценарий, который отправляет команды на сеанс экрана, который выполняется в

0

Код ASCII для CTRL_A равен 1. Таким образом, будет работать следующий код python.

    CTRL_A = chr(1)
0

Хорошо, это будет сложно. Как комментирует 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 в файл, имитируя нажатия пользователем клавиши.

Я не совсем уверен, что это сработает, но никогда не пробовал, но если вам нужно командовать экраном из подпроцесса, некоторым вариантом этого, вероятно, будет ваш лучший выбор.

0

Модуль curses Python может помочь вам в некоторых. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню