Перейти к основному содержимому

ПроцессОс

Стд::СредаИсполнения::ПроцессОс

Объект для работы с внешними процессами.

  • Объект ПроцессОС запускает процесс, а не выполняет команды ОС.

Например, в Windows для получения листинга директорий или выполнения команд (dir / mkdir / cp и т.д.) с помощью консоли (cmd.exe) или интерпретатора (powershell.exe) используется следующий синтаксис:

// Создать процесс cmd.exe и передать (/c) ему команду (copy).
// Следует учитывать, что команда copy в Windows копирует только файлы.
пер Процесс = новый ПроцессОс("cmd.exe", ["/c", "copy " + Что + " " + Куда])

Для Linux:

// Создать процесс bash и передать (-c) в него команду (cp)
пер Процесс = новый ПроцессОс("/bin/bash", ["-c", "cp " + Что + " " + Куда])
  • При возникновении проблем с кодировкой обратите внимание на следующий пример:
метод ПолучитьВерсиюИсполнителя()
пер Процесс = новый ПроцессОс("cmd.exe", ["/c", "executor.cmd -v"])
Процесс.Запустить()

Консоль.Записать(Процесс.ПолучитьПотокВывода().ПрочитатьКакСтроку("cp866"))
;

==

  • Для запуска программ из PATH:
метод ПолучитьВерсиюJavaИMaven()
// Путь до java.exe и mvn.cmd добавлен в PATH,
// поэтому можно не писать "cmd.exe /c"
пер Процесс1 = новый ПроцессОс("java", ["--version"])
Процесс1.Запустить()

// Для запуска скриптов нужно указывать расширение
пер Процесс2 = новый ПроцессОс("mvn.cmd", ["-v"])
Процесс2.Запустить()
;

Сравнение ссылочное

Иерархия типа

Базовые типы: Объект


Конструкторы

ПроцессОс

ПроцессОс(
Команда: Строка,
СоединитьПотокиОшибокИВывода: Булево = Истина)
Перегрузка:
ПроцессОс(Команда: Строка, Аргументы: ЧитаемыйМассив<Объект>, СоединитьПотокиОшибокИВывода: Булево = Истина)

Создает процесс с указанной командой запуска Команда и признаком объединения потоков вывода и ошибок СоединитьПотокиОшибокИВывода. Созданный процесс не запускается.


ПроцессОс

ПроцессОс(
Команда: Строка,
Аргументы: ЧитаемыйМассив<Объект>,
СоединитьПотокиОшибокИВывода: Булево = Истина)
Перегрузка:
ПроцессОс(Команда: Строка, СоединитьПотокиОшибокИВывода: Булево = Истина)

Создает процесс с указанной командой запуска Команда, аргументами Аргументы и признаком объединения потоков вывода и ошибок СоединитьПотокиОшибокИВывода. Созданный процесс не запускается.


Свойства

ПотокиОшибокИВыводаСоединены

ТолькоЧтение

ПотокиОшибокИВыводаСоединены: Булево

Определяет, соединены ли потоки ошибок и вывода:

  • Истина - ошибки пишутся в поток вывода.
  • Ложь - ошибки пишутся в поток ошибок.

Методы

Живой

Живой(): Булево
Проверяет, жив ли запущенный процесс.


Запустить

Запустить(Каталог: Строка? = Неопределено)
Запускает созданный процесс или конвейер процессов.

  • Каталог - рабочий каталог запускаемого и дочерних процессов.

ОжидатьЗавершения

ОжидатьЗавершения(Длительность: Длительность): Булево
Ожидает завершения выполнения одного из условий:

  • внешний процесс завершился,
  • прошло заданное количество секунд Длительность (если задано).

Возвращает Ложь, если внешний процесс не завершился за указанное время Длительность.


Остановить

Остановить()
Останавливает созданный процесс.


ПередатьВыводВ

ПередатьВыводВ(
Команда: Строка,
Аргументы: ЧитаемыйМассив<Объект>
): ПроцессОс
Добавляет новый процесс на основе команды Команда и аргументов Аргументы в конвейер (pipe). К процессу в конвейере будут применены те же настройки, что и к исходному ПроцессОс. Возвращает текущий экземпляр ПроцессОс, в котором выходной поток соответствует выходному потоку нового процесса.

Примеры

метод ПросмотретьПапкуИНайтиПодстроку(ПапкаДляПросмотра: Строка, Фильтр: Строка)
пер Процесс = новый ПроцессОс("cmd.exe", ["/c", "dir %ПапкаДляПросмотра"])

// Передадим вывод в команду поиска подстроки
Процесс.ПередатьВыводВ("cmd.exe", ["/c", "findstr " + Фильтр])

// Запустим конвейер
Процесс.Запустить()
;

ПолучитьPid

ПолучитьPid(): Число?
Возвращает идентификатор процесса в операционной системе, либо Неопределено, если получение PID'а невозможно.


ПолучитьКодВозврата

ПолучитьКодВозврата(): Число?
Возвращает код возврата от внешнего процесса. Код 0 считается нормальным завершением внешнего процесса.


ПолучитьПотокВвода

ПолучитьПотокВвода(): ПотокЗаписи

Чтобы процесс перестал ожидать входные данные, закройте полученный поток ввода.

Возвращает ПотокЗаписи для передачи входных данных в ПроцессОс.

Исключения

ИсключениеНедопустимоеСостояние - если метод вызван до запуска процесса.

Примеры

метод Grep(Вход: Строка, Фильтр: Строка): Строка
// Аналог команды grep в Windows. Требует входных данных
пер Процесс = новый ПроцессОс("cmd.exe", ["/c", "findstr %Фильтр"])

// Указать входные данные можно только после старта процесса
Процесс.Запустить()
пер Поток = Процесс.ПолучитьПотокВвода()
Поток.Записать(Вход)

// Даем понять, что входных данных процесс может больше не ожидать.
Поток.Закрыть()

возврат Процесс.ПолучитьПотокВывода().ПрочитатьКакСтроку()
;

ПолучитьПотокВывода

ПолучитьПотокВывода(): ПотокЧтения
  • Для передачи вывода одного процесса в другой используйте возможности конвейера (см. ПередатьВыводВ()).
  • Не требует закрытия.

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

Для получения данных всего потока вывода, нужно дождаться завершения выполнения процесса (метод ОжидатьЗавершения(...)).

Исключения

ИсключениеНедопустимоеСостояние - если метод вызван до запуска процесса.


ПолучитьПотокОшибок

ПолучитьПотокОшибок(): ПотокЧтения

Не требует закрытия.

Возвращает поток ошибок процесса. Если потоки ошибок и вывода соединены, будет возвращен пустой поток.

Для получения данных всего потока вывода, нужно дождаться завершения выполнения процесса (метод ОжидатьЗавершения(...)).

Исключения

ИсключениеНедопустимоеСостояние - если метод вызван до запуска процесса.


Список унаследованных методов

Объект

ВСтроку, ПолучитьТип, Представление