Spec-Zone.ru › Octave 8

36.5 Управление подпроцессами

Octave включает в себя некоторые высокоуровневые команды, такие как system и popen для запуска подпроцессов. Если вы хотите запустить другую программу для выполнения какой-либо задачи, а затем посмотреть её вывод, вы, вероятно, захотите использовать эти функции.

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

: system ("string") ¶
: system ("string", return_output) ¶
: system ("string", return_output, type) ¶
: [status, output] = system (…) ¶

Выполняет команду оболочки, указанную в string.

Если system вызывается с одним или несколькими выходными аргументами, или если необязательный аргумент return_output имеет значение true, и подпроцесс запускается синхронно, то вывод команды возвращается как переменная. В противном случае, если подпроцесс выполняется синхронно, его вывод отправляется на стандартный вывод. Чтобы отправить вывод команды, выполненной с system через средство просмотра, используйте команду типа

[~, text] = system ("cmd");
more on;
disp (text);

или

more on;
printf ("%s\n", nthargout (2, "system", "cmd"));

Если необязательный аргумент type равен "async", процесс запускается в фоновом режиме, и идентификатор процесса дочернего процесса возвращается немедленно. В противном случае дочерний процесс запускается, и Octave ожидает его завершения. Если аргумент type опущен, он по умолчанию принимает значение "sync".

Функция system может возвращать два значения. Первое — это код завершения команды, а второе — любой вывод команды, который был записан в стандартный поток вывода. Например,

[status, output] = system ("echo foo & exit 2");

присвоит переменной output строку ‘foo’, а переменной status целое число ‘2’.

Для асинхронно запущенных команд status является идентификатором процесса оболочки команды, которая запущена для выполнения команды.

Оболочка, используемая для выполнения команд, варьируется в зависимости от операционной системы и обычно является /bin/sh для систем UNIX и cmd.exe для систем Windows.

См. также: unix, dos.

: unix ("command") ¶
: status = unix ("command") ¶
: [status, text] = unix ("command") ¶
: […] = unix ("command", "-echo") ¶

Выполняет системную команду, если работает под Unix-подобной операционной системой, иначе ничего не делает.

Octave ожидает завершения внешней команды, прежде чем возвращать код завершения программы в status и любой вывод в text.

При вызове без выходного аргумента или при заданном аргументе "-echo", text также отправляется на стандартный вывод.

См. также: dos, system, isunix, ismac, ispc.

: dos ("command") ¶
: status = dos ("command") ¶
: [status, text] = dos ("command") ¶
: […] = dos ("command", "-echo") ¶

Выполняет системную команду, если работает под Windows-подобной операционной системой, иначе ничего не делает.

Octave ожидает завершения внешней команды, прежде чем возвращать код завершения программы в status и любой вывод в text.

При вызове без выходного аргумента или при заданном аргументе "-echo", text также отправляется на стандартный вывод.

См. также: unix, system, isunix, ismac, ispc.

: open file ¶
: output = open (file) ¶

Открывает файл file в Octave или во внешнем приложении на основе типа файла, определяемого по расширению имени файла.

По умолчанию распознаются типы файлов:

.m

Открыть файл в редакторе. Значение output не возвращается.

.mat
octave-workspace

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

.ofig

Открыть рисунок с помощью hgload. См. функцию hgload.

.fig, .ofig

Загрузить рисунок

.exe

Выполнить программу (только в системах Windows). Значение output не возвращается.

Пользовательские расширения файлов также могут обрабатываться, если функция openxxx, где xxx — это расширение, найдена в пути загрузки. Функция должна принимать имя файла в качестве входных данных. Например, для загрузки файлов данных ".dat" в основное рабочее пространство, как это делается по умолчанию для файлов ".mat", можно определить "opendat.m" со следующим содержимым:

function retval = opendat (fname)
  evalin ("base", sprintf ("load ('%s');", fname));
endfunction

Другие типы файлов открываются в соответствующем внешнем приложении.

: output = perl (scriptfile) ¶
: output = perl (scriptfile, argument1, argument2, …) ¶
: [output, status] = perl (…) ¶

Вызывает скрипт Perl scriptfile, возможно, со списком аргументов командной строки.

Возвращает вывод в output и необязательный статус в status. Если scriptfile не является абсолютным именем файла, он ищется в текущем каталоге, а затем в пути загрузки Octave.

См. также: system, python.

: output = python (scriptfile) ¶
: output = python (scriptfile, argument1, argument2, …) ¶
: [output, status] = python (…) ¶

Вызывает скрипт Python scriptfile, возможно, со списком аргументов командной строки.

Возвращает вывод в output и необязательный статус в status. Если scriptfile не является абсолютным именем файла, он ищется в текущем каталоге, а затем в пути загрузки Octave.

Замечание о программировании: в системах UNIX скрипт будет выполнен с помощью python3, а в Windows — с помощью python. Вы можете переопределить эти значения по умолчанию, установив переменную среды PYTHON, например, изнутри Octave, используя setenv PYTHON /usr/local/bin/python3.

См. также: system, perl.

: fid = popen (command, mode) ¶

Запускает процесс и создает канал.

Имя команды для запуска задается с помощью command. Аргумент mode может быть:

"r"

Канал будет подключен к стандартному выводу процесса и открыт для чтения.

"w"

Канал будет подключен к стандартному вводу процесса и открыт для записи.

Идентификатор файла, соответствующий входному или выходному потоку процесса, возвращается в fid.

Например:

fid = popen ("ls -ltr / | tail -3", "r");
while (ischar (s = fgets (fid)))
  fputs (stdout, s);
endwhile

   -| drwxr-xr-x  33 root  root  3072 Feb 15 13:28 etc
   -| drwxr-xr-x   3 root  root  1024 Feb 15 13:28 lib
   -| drwxrwxrwt  15 root  root  2048 Feb 17 14:53 tmp

См. также: popen2.

: status = pclose (fid) ¶

Закрыть идентификатор файла fid, который был открыт с помощью popen.

В случае успеха fclose возвращает 0, в противном случае — -1.

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

См. также: fclose, popen.

: [in, out, pid] = popen2 (command, args) ¶

Запустить дочерний процесс с двусторонней коммуникацией.

Имя процесса задается параметром command, а args — это массив или ячейковый массив строк, содержащих параметры для команды.

Идентификаторы файлов для входного и выходного потоков дочернего процесса возвращаются в in и out. Если выполнение команды прошло успешно, pid содержит идентификатор процесса дочернего процесса. В противном случае pid равен -1.

Например:

[in, out, pid] = popen2 ("sort", "-r");
fputs (in, "these\nare\nsome\nstrings\n");
fclose (in);
EAGAIN = errno ("EAGAIN");
done = false;
do
  s = fgets (out);
  if (ischar (s))
    fputs (stdout, s);
  elseif (errno () == EAGAIN)
    pause (0.1);
    fclear (out);
  else
    done = true;
  endif
until (done)
fclose (out);
waitpid (pid);

   -| these
   -| strings
   -| some
   -| are

Обратите внимание, что popen2, в отличие от popen, не будет «собирать» дочерний процесс. Если вы не используете waitpid для проверки состояния выхода дочернего процесса, он будет «висеть» до выхода Octave.

См. также: popen, waitpid.

: val = EXEC_PATH () ¶
: old_val = EXEC_PATH (new_val) ¶
: old_val = EXEC_PATH (new_val, "local") ¶

Запрос или установка внутренней переменной, которая определяет список директорий, разделённых двоеточием, для добавления в переменную окружения PATH при выполнении внешних программ.

Начальное значение берется из переменной среды OCTAVE_EXEC_PATH, но это значение может быть переопределено аргументом командной строки --exec-path PATH.

При вызове из функции с опцией "local", переменная изменяется локально для функции и всех вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.

См. также: IMAGE_PATH, OCTAVE_HOME, OCTAVE_EXEC_HOME.

В большинстве случаев следующие функции просто декодируют свои аргументы и выполняют соответствующие системные вызовы Unix. Для полного примера их использования см. определение функции popen2.

: [pid, msg] = fork () ¶

Создать копию текущего процесса.

Функция fork может вернуть одно из следующих значений:

> 0

Вы находитесь в родительском процессе. Возвращаемое значение из fork — идентификатор процесса дочернего процесса. Вы должны обеспечить ожидание завершения дочерних процессов.

0

Вы находитесь в дочернем процессе. Вы можете вызвать exec для запуска другого процесса. Если это не удастся, вы, вероятно, должны вызвать exit.

< 0

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

: [err, msg] = exec (file, args) ¶

Заменить текущий процесс новым процессом.

Вызов exec без предварительного вызова fork завершит текущий процесс Octave и заменит его программой, имя которой указано в file. Например,

exec ("ls", "-l")

запустит ls и вернет вас к приглашению вашей оболочки.

Если вызов успешен, exec не возвращает значение. Если exec возвращает значение, err будет отличным от нуля, а msg будет содержать сообщение об ошибке, зависящее от системы.

: [read_fd, write_fd, err, msg] = pipe () ¶

Создать канал и вернуть входные и выходные концы канала соответственно в read_fd и write_fd.

Если вызов успешен, err равен 0, а msg — пустая строка. В противном случае err не равен нулю, а msg содержит сообщение об ошибке, зависящее от системы.

См. также: mkfifo.

: [fid, msg] = dup2 (old, new) ¶

Дублировать дескриптор файла.

Если вызов успешен, fid больше нуля и содержит новый идентификатор файла. В противном случае fid отрицателен, а msg содержит сообщение об ошибке, зависящее от системы.

См. также: fopen, fclose, fcntl.

: [pid, status, msg] = waitpid (pid, options) ¶

Ожидать завершения процесса pid.

Аргумент pid может быть:

-1

Ожидать завершения любого дочернего процесса.

0

Ожидать завершения любого дочернего процесса, группа процесса которого равна группе процесса интерпретатора Octave.

> 0

Ожидать завершения дочернего процесса с ID pid.

Аргумент options может быть побитовым ИЛИ одного или нескольких из следующих констант:

0

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

WNOHANG

Не зависать, если статус не доступен немедленно.

WUNTRACED

Отчитываться о состоянии любых приостановленных дочерних процессов, статус которых еще не был сообщен с момента их приостановки.

WCONTINUE

Возвратиться, если приостановленный дочерний процесс был возобновлен доставкой SIGCONT. Это значение может не иметь смысла на всех системах.

Если возвращаемое значение pid больше 0, это идентификатор процесса завершенного дочернего процесса. Если произошла ошибка, pid будет меньше нуля, а msg будет содержать сообщение об ошибке, зависящее от системы. Значение status содержит дополнительную информацию о завершенном дочернем процессе, зависящую от системы.

См. также: WCONTINUE, WCOREDUMP, WEXITSTATUS, WIFCONTINUED, WIFSIGNALED, WIFSTOPPED, WNOHANG, WSTOPSIG, WTERMSIG, WUNTRACED.

: v = WCONTINUE () ¶

Возвращает числовое значение макроса WCONTINUE.

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

См. также: waitpid, WNOHANG, WUNTRACED.

: tf = WCOREDUMP (status) ¶

Принимая status из вызова waitpid, возвращает true, если дочерний процесс создал дамп ядра.

Эта функция должна быть использована только в том случае, если WIFSIGNALED вернула true. Макрос, используемый для реализации этой функции, не указан в POSIX.1-2001 и недоступен на некоторых реализациях Unix (например, AIX, SunOS).

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: tf = WEXITSTATUS (status) ¶

Принимая status из вызова waitpid, возвращает код завершения дочернего процесса.

Эта функция должна быть использована только в том случае, если WIFEXITED вернула true.

См. также: waitpid, WIFEXITED, WIFSIGNALED, WTERMSIG, WCOREDUMP, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: tf = WIFCONTINUED (status) ¶

При заданном значении status из вызова waitpid, возвращает true, если дочерний процесс был возобновлён доставкой SIGCONT.

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WCOREDUMP, WIFSTOPPED, WSTOPSIG.

: tf = WIFSIGNALED (status) ¶

При заданном значении status из вызова waitpid, возвращает true, если дочерний процесс был завершён по сигналу.

См. также: waitpid, WIFEXITED, WEXITSTATUS, WTERMSIG, WCOREDUMP, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: tf = WIFSTOPPED (status) ¶

При заданном значении status из вызова waitpid, возвращает true, если дочерний процесс был остановлен доставкой сигнала.

Это возможно только если вызов был сделан с использованием WUNTRACED или когда дочерний процесс отслеживается (см. ptrace(2)).

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WCOREDUMP, WSTOPSIG, WIFCONTINUED.

: tf = WIFEXITED (status) ¶

При заданном значении status из вызова waitpid, возвращает true, если дочерний процесс завершился нормально.

См. также: waitpid, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WCOREDUMP, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: v = WNOHANG () ¶

Возвращает числовое значение макроса WNOHANG.

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

См. также: waitpid, WUNTRACED, WCONTINUE.

: tf = WSTOPSIG (status) ¶

При заданном значении status из вызова waitpid, возвращает номер сигнала, который привел к остановке дочернего процесса.

Эта функция должна использоваться только если WIFSTOPPED вернула true.

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WCOREDUMP, WIFSTOPPED, WIFCONTINUED.

: tf = WTERMSIG (status) ¶

При заданном значении status из вызова waitpid, возвращает номер сигнала, который привёл к завершению дочернего процесса.

Эта функция должна использоваться только если WIFSIGNALED вернула true.

См. также: waitpid, WIFEXITED, WEXITSTATUS, WIFSIGNALED, WCOREDUMP, WIFSTOPPED, WSTOPSIG, WIFCONTINUED.

: v = WUNTRACED () ¶

Возвращает числовое значение макроса WUNTRACED.

WUNTRACED - аргумент опции, который может быть передан waitpid для указания, что он должен также вернуть, если дочерний процесс остановился, но не отслеживается через системный вызов ptrace.

См. также: waitpid, WNOHANG, WCONTINUE.

: fcntl (fid, request, arg) ¶
: [status, msg] = fcntl (fid, request, arg) ¶

Изменение свойств открытого файла fid.

Следующие значения могут быть переданы как request:

F_DUPFD ¶

Возвращение дубликата дескриптора файла.

F_GETFD ¶

Возвращение флагов дескриптора файла для fid.

F_SETFD ¶

Установление флагов дескриптора файла для fid.

F_GETFL ¶

Возвращение флагов состояния файла для fid. Следующие коды могут быть возвращены (некоторые флаги могут быть не определены на некоторых системах).

O_RDONLY ¶

Открытие только для чтения.

O_WRONLY ¶

Открытие только для записи.

O_RDWR ¶

Открытие для чтения и записи.

O_APPEND ¶

Добавление при каждой записи.

O_CREAT ¶

Создание файла, если он не существует.

O_NONBLOCK ¶

Режим без блокировки.

O_SYNC ¶

Ожидание завершения записи.

O_ASYNC ¶

Асинхронный ввод-вывод.

F_SETFL ¶

Установление флагов состояния файла для fid в значение, указанное arg. Единственными изменяемыми флагами являются O_APPEND и O_NONBLOCK.

В случае успеха status равно 0, а msg — пустая строка. В противном случае status равно -1, а msg содержит сообщение об ошибке, зависящее от системы.

См. также: fopen, dup2.

: kill (pid, sig) ¶
: [status, msg] = kill (pid, sig) ¶

Отправка сигнала sig процессу pid.

Если pid положительное, то сигнал sig отправляется процессу pid.

Если pid равно 0, то сигнал sig отправляется каждому процессу в группе процессов текущего процесса.

Если pid равно -1, то сигнал sig отправляется каждому процессу, кроме процесса 1.

Если pid меньше -1, то сигнал sig отправляется каждому процессу в группе процессов -pid.

Если sig равно 0, то сигнал не отправляется, но проверка ошибок всё равно выполняется.

В случае успеха status равно 0, а msg — пустая строка. В противном случае status равно -1, а msg содержит сообщение об ошибке, зависящее от системы.

: S = SIG () ¶

Возвращает структуру, содержащую имена сигналов Unix и их определённые значения.

© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v8.1.0/Controlling-Subprocesses.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API