Программная навигация приложения оболочки Linux

Я пытаюсь выяснить, можно ли программно ориентироваться в приложении оболочки Linux — на основе текста.

В частности, я хотел бы добиться этого с помощью PHP и phpSecLib, но если вы знаете лучший / более простой способ, пожалуйста, укажите.

Я знаю, как использовать PHP + phpSecLib для входа на сервер Linux через SSH и запуска команд оболочки.

Итак, у нас есть это стороннее приложение на нашем внутреннем сервере, где у нас нет возможности доступа к оперативным данным.
В приложении есть отчет, который мы можем сгенерировать, который даст нам «живую» картину различных KPI, однако этот экран отчета не обновляется автоматически, поэтому придется выйти из отчета и сгенерировать его снова для обновленных KPI.

Когда приложение запускается, мне предлагают «заставку», говорящую «Добро пожаловать в Ye Olde Application ver. 3,14159«(имя вымышленное), вскоре после обновления« экран / вывод »и представления« Главного меню », где каждая точка меню доступна нажатием клавиши (1-9a-z).

Главное меню

                ┌────────────────────────────────────────────────┐
│                                                │
│   1    Foo                    bar              │
│   2    Same                   procedure        │
│   3    Rudolph                Reindeer         │
│   4    Report                 generator        │
│   5    Log-off                system           │
│                                                │
└────────────────────────────────────────────────┘

Поэтому в этом случае я хотел бы перейти к «4 Генератору отчетов» [Нажмите 4]. После этого «экран / вывод» обновляется новым подменю, как указано выше, с другими параметрами. Здесь я перейду к «1 Создать новый отчет» [Нажмите 1], снова «обновление экрана / вывода». Теперь с новым меню перейдите в «2 Superhandy Super-report» [Нажмите 2].

После этого я хотел бы сохранить текст с экрана отчета в документ для дальнейшего анализа. Но это не первоначальная проблема.

Другая идея может быть ..

..сделать это в shell-скрипте (Bash) как-то с макросом или подобным.

0

Решение

Сам разобрался 😉 Оставлю здесь, если кто-нибудь еще наткнется на ту же проблему.

require_once('Net/SSH2.php');

$ip = '127.0.0.1'; // The IP of the SSH server
$username = 'username';
$password = 'password';

$ssh = new Net_SSH2($ip);
if (!$ssh->login($username, $password)) {
exit('Login Failed');
}

// Set a reasonable timeout (secs)
$ssh->setTimeout(5);
// Prepare ANSI "screen reader"$ansi = new File_ANSI();
$ansi->setDimensions(200, 30); // set number of collumns and rows of each screen

// Should probably do some stuff here to make sure we're ready for next step

$ssh->write("/usr/bin/3rdpartybackendapp\n"); // Start the backend application
// Read until the "Please select" text appears
$ssh->read('Please select');

$ssh->write("4"); // Select "4: Report generator"$ansi->appendString($ssh->read('Please select'));

$ssh->write("1"); // Select "1: Create reports"$ansi->appendString($ssh->read('Please select'));

$ssh->write("h"); // Select "H: Dashboard report
$ansi->appendString($ssh->read('Q  Quit'));

$output = strip_tags($ansi->getScreen()) . PHP_EOL . PHP_EOL; // Collect the screen
$fulloutput .= $output;

// The report has multiple pages, so continue to read pages
// until there are no more pages to read.
// Application does not show "N  Next" on last page.
while(false !== strpos($output, 'N  Next')) {
$ssh->write("n"); // Select "N: Next page
$ansi->appendString($ssh->read('Q  Quit'));

$output = strip_tags($ansi->getScreen()) . PHP_EOL . PHP_EOL; // Collect the screen
$fulloutput .= $output;
}

echo strip_tags($fulloutput); // outputs HTML

// Terminate the SSH session
$ssh->disconnect();

Обновить:
Изменено с расширенного My_File_ANSI в File_ANSI в приведенном выше примере см. комментарии.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]