Как сделать консольную программу

CLI означает интерфейс командной строки. Приложений командной строки выполняются из командной строки или в командной строке. Одно из преимуществ приложений CLI заключается в том, что они не имеют слоя представления (только потенциально отражающего выходные данные на экране) и могут выполняться более чем по одному за раз. Некоторые из распространенных способов использования-это задания cron, сценарии манипуляций, сценарии импорта данных, командные утилиты и многое другое.

Приложения CLI выполняются из командной строки. Они полезны для создания cron заданий, скриптов, командных утилит и многого другого.

Структура

Вы можете создать приложение CLI в Phalcon, используя класс PhalconCliConsole. Этот класс расширяется от основного абстрактного класса приложений и использует каталог, в котором расположены сценарии задач. Сценарии задач — это классы, которые расширяют PhalconCliTask и содержат код, который нам нужно выполнить.

Структура каталогов приложения CLI может выглядеть следующим образом:

Создание консольного приложения C++ в Visual Studio

  • app/tasks/MainTask.php
  • app/cli.php основной загрузочный файл

В приведенном выше примере cli.php является точкой входа нашего приложения, в то время как каталог src/tasks содержит все классы задач, которые обрабатывают каждую команду.

ПРИМЕЧАНИЕ: Каждый файл задачи и класс должны быть снабжены суффиксом Task . Задача по умолчанию (если параметры не были переданы) — MainTask , а метод по умолчанию, который будет выполняться внутри задачи- main

Создание загрузочного файла

Как и в обычных MVC приложениях, для начальной загрузки приложения используется загрузочный файл. Вместо загрузчика index.php в веб-приложениях мы используем файл cli.php для начальной загрузки приложения.

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

registerNamespaces( [ ‘MyApp’ => ‘src/’, ] ); $loader->register(); $container = new CliDI(); $dispatcher = new Dispatcher(); $dispatcher->setDefaultNamespace(‘MyAppTasks’); $container->setShared(‘dispatcher’, $dispatcher); $console = new Console($container); $arguments = []; foreach ($argv as $k => $arg) < if ($k === 1) < $arguments[‘task’] = $arg; >elseif ($k === 2) < $arguments[‘action’] = $arg; >elseif ($k >= 3) < $arguments[‘params’][] = $arg; >> try < $console->handle($arguments); > catch (PhalconException $e) < fwrite(STDERR, $e->getMessage() . PHP_EOL); exit(1); > catch (Throwable $throwable) < fwrite(STDERR, $throwable->getMessage() . PHP_EOL); exit(1); > catch (Exception $exception) < fwrite(STDERR, $exception->getMessage() . PHP_EOL); exit(1); >

Давайте рассмотрим код выше более подробно.

Сначала нам нужно создать все необходимые сервисы для нашего приложения CLI. Мы создадим загрузчик для автоматической загрузки наших задач, приложение CLI, диспетчер и консольное приложение CLI. Это минимальное количество служб, которые нам нужно создать для создания приложения CLI.

Создание консольного калькулятора в Python.

Загрузчик

$loader = new Loader(); $loader->registerNamespaces( [ ‘MyApp’ => ‘src/’, ] ); $loader->register();

Создать автозагрузчик Phalcon и зарегистрироваться пространства имен в директории src/ .

ПРИМЕЧАНИЕ: Если вы решили использовать автозагрузчик Composer в вашем composer.json , вам не нужно регистрировать загрузчик в этом приложении

DI

$container = new CliDI();

Нам нужен контейнер для инъекции зависимостей. Вы можете использовать контейнер PhalconDiFactoryDefaultCli, в котором уже зарегистрированы сервисы. Кроме того, вы всегда можете использовать PhalconDi и регистрировать необходимые вам услуги, одну за другой.

Диспетчер

$dispatcher = new Dispatcher(); $dispatcher->setDefaultNamespace(‘MyAppTasks’); $container->setShared(‘dispatcher’, $dispatcher);

Приложениям CLI требуется определенный диспетчер. PhalconCliDispatcher предлагает ту же функциональность, что и основной диспетчер для приложений MVC, но он адаптирован к приложениям CLI. Как и ожидалось, мы создаем экземпляр объекта dispatcher, устанавливаем пространство имен по умолчанию и затем регистрируем его в контейнере DI.

Приложение

$console = new Console($container);

Как уже упоминалось выше, приложение командной строки осуществляется с помощью PhalconCliConsole. Здесь мы создаем объект и передать его в контейнер.

Аргументы Наше приложение нуждается в аргументах. Они приходят в виде :

php ./cli.php argument1 argument2 argument3 .

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

$arguments = []; foreach ($argv as $k => $arg) < if ($k === 1) < $arguments[‘task’] = $arg; >elseif ($k === 2) < $arguments[‘action’] = $arg; >elseif ($k >= 3) < $arguments[‘params’][] = $arg; >>

Читайте также:
Как правильно пишется программа концерта

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

Итак, для следующего примера:

try < $console->handle($arguments); > catch (PhalconException $e) < fwrite(STDERR, $e->getMessage() . PHP_EOL); exit(1); > catch (Throwable $throwable) < fwrite(STDERR, $throwable->getMessage() . PHP_EOL); exit(1); > catch (Exception $exception) < fwrite(STDERR, $exception->getMessage() . PHP_EOL); exit(1); >

В приведенном выше коде мы используем наш консольный объект и вызываем handle с вычисляемыми параметрами. Приложение CLI выполнит необходимую маршрутизацию и отправит запрошенную задачу и действие. Если возникает исключение, оно будет поймано операторами catch и ошибки будут отображаться на экране соответственно.

Исключения

Любое исключение, вызванное в компоненте PhalconCliConsole, будет иметь тип PhalconCliConsoleException, что позволяет вам ловить исключение специально.

Задачи

Задачи являются эквивалентом контроллеров в приложении MVC. Любое приложение CLI нуждается по крайней мере в одной задаче под названием MainTask и mainAction , и у каждой задачи должно быть mainAction . Любая определенная задача должна иметь mainAction , которая будет вызвана, если никакое действие не определено. Вы не ограничены количеством действий, которые может содержать каждая задача.

Ниже приведен пример файла app/tasks/MainTask.php :

Вы можете реализовать свои собственные задачи, либо расширяя поставляемый PhalconCliTask, либо написав свой собственный класс, реализующий PhalconCliTaskInterface.

Действия

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

public function regenerateAction(int $count = 0) < echo ‘This is the retenerate action’ . PHP_EOL; >>

Затем мы можем вызвать действие main (действие по умолчанию):

./cli.php users

или действие regenerate :

./cli.php users regenerate

Обработка параметров

Вы также можете передавать параметры в действие. Пример того, как обрабатывать параметры, можно найти выше, в Примере файла bootstrap.

public function addAction(int $first, int $second) < echo $first + $second . PHP_EOL; >>

Затем мы можем выполнить следующую команду:

php cli.php users add 4 5 9

Запуск цепочки команд

Вы также можете цеплять задачи. Чтобы запустить их один за другим, нам нужно внести небольшое изменение в наш bootstrap: нам нужно зарегистрировать наше приложение в контейнере DI:

// . $console = new Console($container); $container->setShared(‘console’, $console); $arguments = []; // .

Теперь, когда консольное приложение находится внутри контейнера DI, Мы можем получить к нему доступ из любой задачи.

Предположим, что мы хотим вызвать printAction() из задачи Users , все, что нам нужно сделать, это вызвать его с помощью контейнера.

console->handle( [ ‘task’ => ‘main’, ‘action’ => ‘print’, ] ); > public function printAction() < echo ‘Меня тоже напечатают!’ . PHP_EOL; >>

Эта техника позволяет запускать любую задачу и любое действие из любой другой задачи. Однако это не рекомендуется, потому что это может привести к кошмарам обслуживания. Лучше расширить PhalconCliTask и реализовать там свою логику.

Модули

Приложения CLI также могут обрабатывать различные модули, как и приложения MVC. Вы можете зарегистрироваться различные модули приложения командной строки, чтобы обрабатывать различные пути приложения командной строки. Это позволяет лучше организовать код и группировать задачи.

Приложение командной строки предлагает следующие методы:

  • getDefaultModule — string — Возвращает имя модуля по умолчанию
  • getModule(string $name) — array / object — Возвращает определение модуля, зарегистрированное в приложении через имя модуля
  • getModules — array — Возврат модулей, зарегистрированных в приложении
  • registerModules(array $modules, bool $merge = false) — AbstractApplication — Регистрация массива модулей, имеющихся в приложении
  • setDefaultModule(string $defaultModule) — AbstractApplication — Задает имя модуля, которое будет использоваться, если маршрутизатор не возвращает допустимый модуль

Вы можете зарегистрировать frontend и backend модуль для вашего консольного приложения следующим образом:

registerNamespaces( [ ‘MyApp’ => ‘src/’, ] ); $loader->register(); $container = new CliDI(); $dispatcher = new Dispatcher(); $dispatcher->setDefaultNamespace(‘MyAppTasks’); $container->setShared(‘dispatcher’, $dispatcher); $console = new Console($container); $console->registerModules( [ ‘frontend’ => [ ‘className’ => BackendModule::class, ‘path’ => ‘./src/frontend/Module.php’, ], ‘backend’ => [ ‘className’ => FrontendModule::class, ‘path’ => ‘./src/backend/Module.php’, ], ] ); $arguments = []; foreach ($argv as $k => $arg) < if ($k === 1) < $arguments[‘task’] = $arg; >elseif ($k === 2) < $arguments[‘action’] = $arg; >elseif ($k >= 3) < $arguments[‘params’][] = $arg; >> try < $console->handle($arguments); > catch (PhalconException $e) < fwrite(STDERR, $e->getMessage() . PHP_EOL); exit(1); > catch (Throwable $throwable) < fwrite(STDERR, $throwable->getMessage() . PHP_EOL); exit(1); > catch (Exception $exception) < fwrite(STDERR, $exception->getMessage() . PHP_EOL); exit(1); >

Читайте также:
Программа для авто регистраций

Приведенный выше код предполагает, что вы структурировали свои каталоги так, чтобы они содержали модули в каталогах frontend и backend .

  • src/
  • src/backend/Module.php
  • src/frontend/Module.php
  • php cli.php

Маршруты

Приложение CLI имеет свой собственный маршрутизатор. По умолчанию приложение Phalcon CLI использует объект PhalconCliRouter, но вы можете реализовать свой собственный с помощью объекта PhalconCliRouterInterface.

Подобно приложению MVC, PhalconCliRouter использует объекты PhalconCliRouterRoute для хранения информации о маршруте. Вы всегда можете реализовать свои собственные объекты, реализовав PhalconCliRouterRouteInterface.

Маршруты принимают ожидаемые параметры регулярных выражений, такие как a-zA-Z0-9 и т. д. Есть также дополнительные заполнители, которыми вы можете воспользоваться:

ЗаполнительОписание
:module Модуль (нужно сначала установить модули)
:task Имя задачи
:namespace Имя пространства имен
:action Действие
:params Никакие параметры
:int Является ли это целочисленным параметром маршрута

PhalconCliRouter поставляется с двумя предопределенными маршрутами, так что он работает прямо из коробки. Это:

  • /:task/:action
  • /:task/:action/:params

Если вы не хотите использовать маршруты по умолчанию, все, что вам нужно сделать, это передать false в объекте PhalconCliRouter object upon construction.

Для получения дополнительной информации о маршрутах и классах маршрутов см. страницу Маршрутизация .

События

Приложения CLI также осведомлены о событиях. Вы можете использовать методы setEventsManager и getEventsManager получить доступ к менеджер событий.

Доступны следующие события:

СобытиеСтопОписание
afterHandleTask Да Вызывается после обработки задачи
afterStartModule Да Вызывается после обработки модуля (если используются модули)
beforeHandleTask Нет Вызывается до обработки задачи
beforeStartModule Да Вызывается перед обработкой модуля (если используются модули)
boot Да Вызывается при загрузке приложения

Если вы используете PhalconCliDispatcher , вы также можете воспользоваться преимуществом события beforeException , которое может остановить операции и запускается из объекта dispatcher .

  • Настройка автоматической индексации Smart Search
  • Назначение разрешений CLI при сохранении материалов и категотий com_content
  • Php to Zephir
  • 000 Содержание
  • 001 Добро пожаловать!
  • 002 Почему Zephir?
  • 003 Введение в Zephir
  • 004 Установка
  • 005 Урок
  • 006 Базовый синтаксис
  • 007 Типы
  • 008 Операторы
  • 009 Массивы
  • 010 Классы и объекты
  • 011 Встроенные методы
  • 012 Управляющие структуры
  • 014 Вызов функций
  • 020 Секции Phpinfo()
  • 016 Пользовательские оптимизаторы
  • 017 Конфигурационный файл

Источник: rigin.net

Создание консольного приложения

Консольное приложение создается следующим образом. Сначала нужно из меню File выбрать команду New | Other Application и на вкладке New появившегося диалогового окна New Items щелкнуть на значке Console Wizard (рис. 7.1). В результате этих действий на экране появится окно Console Wizard (рис. 7.2).

В этом окне можно выбрать язык программирования и указать, будет ли использоваться та или иная библиотека. После того как будут заданы параметры создаваемого консольного приложения, надо щелкнуть на кнопке ОК. В результате C++ Builder создаст проект консольного .приложения и на экране появится окно редактора кода, в котором находится шаблон консольного приложения — функция main (рис. 7.3).

Рис. 7.1. Чтобы приступить к созданию консольного приложения, надо щелкнуть на значке Console Wizard

Рис. 7.2. В окне Console Wizard надо задать характеристики консольного приложение

Начинается консольное приложение директивой #pragma hdrstop, которая запрещает выполнение предварительной компиляции подключаемых файлов. После этой директивы надо вставить директивы #inciude, обеспечивающие подключение необходимых библиотек (например, #include ). Директива #pragma argsused отключает предупреждение компилятора о том, что аргументы, указанные в заголовке функции, не используются.

Рис. 7.3. Шаблон консольного приложения

Следует обратить внимание на то, что консольное приложение разрабатывается в Windows, а выполняется как программа DOS. В DOS и Windows буквы русского алфавита имеют разные коды (в DOS используется кодировка ASCII, а в Windows — ANSI). Это приводит к тому, что консольное приложение вместо сообщений на русском языке выводит «абракадабру».

Проблему вывода сообщений на русском языке консольными приложениями можно решить, разработав функцию перекодировки ANSI-строки в строку ASCII. Если эту функцию назвать rus, то инструкция вывода сообщения может выглядеть, например, так:

Читайте также:
Программа обновления драйверов бустер

printf( rus(«Скорость: %3.2f км/час»), v);

В качестве примера консольного приложения в листинге 7.1 приведена программа «Угадай число», которая для вывода сообщений использует функцию RUS. Значение функции rus — строка символов в кодировке ASCII, соответствующая строке, полученной в качестве параметра.

Листинг 7.1. Пример консольного приложения

#pragma hdrstop
#include
#include // для доступа к getch()
#include // для доступа к srandf), rand()
linclude // для доступа к time_t и time О
char* rus(char* st);
// преобразует ANSI-строку в строку ASCII tpragma argsused
int main(int argc, char* argv[])

int comp,
// число, «задуманное» компьютером igrok,
// вариант игрока n=0; // число попыток
// ГСЧ — генератор случайных чисел
time_t t; // текущее время (для инициализации ГСЧ)
srandf (unsigned)time( // инициализация ГСЧ
comp = rand() % 10 + 1;
puts( rus(«ХпКомпыотер «задумал» число от 1 до 10.»));
puts( rus(«Вы должны его угадать за три попытки.»));

printf(«->»);
scanf(«%i», Sigrok);
n++; > while ( igrok != comp n < 3);
if (igrok == comp)
printf( rus(«ВЫ ВЫИГРАЛИ!»));
else
puts( rus(«Вы проиграли.»));
printf( rus(«Компьютер «задумал» число %d»), comp); >
printf( гиз(«Для завершения нажмите любую клавишу. «));
getch();
return 0; >

/*Функция rus преобразует ANSI-строку в строку ASCII
и может использоваться для вывода сообщений
на русском языке в консольных программах.
Пример использования:
printf( rus(«Скорость: %3.2f км/час»), v);
printf( rus(«У лукоморья дуб зеленыйп»)); */
char* rus(char* st)
unsigned char* p = st;
/* при объявлении символов как char русские буквы

кодируются отрицательными числами */ while ( *р)
if (*p >= 192) // здесь русская буква
if (*р
*р -= 64; else // p . я
*р -= 16;
Р++; > return st;

Компиляция консольного приложения выполняется обычным образом, т. е. выбором из меню Project команды Compile.

После успешной компиляции программа может быть запущена выбором из меню Run команды Run. При запуске консольного приложения на экране появляется стандартное окно командной строки. На рис. 7.4 приведен вид окна командной строки, в котором работает консольное приложение, созданное в C++ Builder.

Процесс сохранения проекта консольного приложения стандартный. В результате выбора из меню File команды Save Project на экране сначала появляется окно Save Project, в котором нужно ввести имя проекта, а затем — окно Save Utit, в котором надо задать имя модуля.

Получить доступ к модулю консольного приложения (тексту программы) для того, чтобы внести изменения в программу, несколько сложнее. Сначала, выбрав в меню File команду Open Project, нужно открыть файл проекта. Затем надо открыть окно Project Manager (команда View | Project Manager), раскрыть список файлов, выбрать срр-файл и из контекстного меню выбрать команду Open (или сделать двойной щелчок на имени срр-файла) (рис. 7.5).

Рис. 7.4. Окно командной строки, в котором работает консольное приложение

Рис. 7.5. Чтобы внести изменения в программу, надо в окне Project Manager выбрать срр-файл и из контекстного меню выбрать команду Open

Fore kc .ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий

Источник: www.ci-builder.ru

Иллюстрированный самоучитель по C++ Builder

Консольное приложение создается следующим образом. Сначала нужно из меню File выбрать команду New › Other Application и на вкладке New появившегося диалогового окна New Items щелкнуть на значке Console Wizard (рис. 7.1). В результате этих действий на экране появится окно Console Wizard (рис. 7.2).

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

Рис. 7.1. Чтобы приступить к созданию консольного приложения, надо щелкнуть на значке Console Wizard

Рис. 7.2. В окне Console Wizard надо задать характеристики консольного приложение

После того как будут заданы параметры создаваемого консольного приложения, надо щелкнуть на кнопке ОК. В результате C++ Builder создаст проект консольного.приложения и на экране появится окно редактора кода, в котором находится шаблон консольного приложения – функция main (рис. 7.3).

Рис. 7.3. Шаблон консольного приложения

Источник: samoychiteli.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru