36.5控制子流程

Octave包括一些高级命令,如系统popen用于启动子流程。如果您想运行另一个程序来执行某些任务,然后查看其输出,则可能需要使用这些函数。

Octave还提供了一些非常低级的类Unix函数,这些函数也可以用于启动子流程,但您可能只有在找不到任何方法来执行更高级的函数时才应该使用它们。

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

执行从指定的shell命令一串.

如果系统使用一个或多个输出参数调用,或者如果optionalargument返回输出如果为true,并且子进程同步启动,则命令的输出将作为变量返回。否则,如果子流程是同步执行的,则其输出将发送到标准输出。发送使用执行的命令的输出系统通过分页器,使用如下命令

[~,text]=系统(“cmd”);更多关于;disp(文本);

更多关于;printf(“%s\n”,nthargout(2,“system”,“cmd”));

如果可选参数type异步,进程在后台启动,并立即返回子进程的进程ID。否则,子进程将启动,Octave将等待itexits。如果type参数被省略,它默认为值同步.

这个系统函数可以返回两个值。第一个是命令的退出状态,第二个是写入标准输出流的命令的任何输出。例如

[status,output]=系统(“echo-foo&exit 2”);

将设置变量输出到字符串foo,以及变量status到整数2’.

对于异步运行的命令,status是为运行命令而启动的commandshell的进程id。

用于执行命令的shell随操作系统的不同而不同,并且通常/bin/sh对于UNIX系统和命令提示符对于Windows系统。

详见: unix, dos.

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

如果在类似Unix的操作系统下运行,请执行系统命令,否则不执行任何操作。

Octave等待外部命令完成,然后返回中程序的exitstatusstatus以及中的任何输出文本.

当在没有输出参数的情况下调用时,或者回显给出了参数,那么文本也被发送到标准输出。

详见: dos, 系统, isunix, ismac, ispc.

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

如果在类似Windows的操作系统下运行,请执行系统命令,否则不执行任何操作。

Octave等待外部命令完成,然后返回中程序的exitstatusstatus以及中的任何输出文本.

当在没有输出参数的情况下调用时,或者回显给出了参数,那么文本也被发送到标准输出。

详见: unix, 系统, isunix, ismac, ispc.

 
: open file
: output = open (file)

打开文件文件基于文件扩展名确定的文件类型,在Octave中或在外部应用程序中。

默认情况下,可识别的文件类型为

.m

在编辑器中打开文件。不输出返回值。

小地毯
Octave工作空间

使用打开数据文件加载.如果没有返回值输出被指定时,变量被加载到基本工作空间中。否则输出将是包含已加载数据的结构体。详见加载函数.

.ofg

用打开图形hgload详见hgload函数.

.图,.ofig

加载图形

.exe

执行程序(仅在Windows系统上)。不输出返回值。

如果函数openxxx这里的xxx是扩展,在加载路径中找到。函数必须接受文件名作为输入。例如,为了加载.dat基本工作空间中的数据文件,默认情况下为小地毯文件,可以定义opendat.m其内容如下:

函数retval=opendat(fname)evalin(“base”,sprintf(“load('%s');”,fname));结束函数

其他文件类型在相应的外部应用程序中打开。

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

调用Perl脚本脚本文件,可能带有命令线性参数列表。

返回输出输出和中的可选状态status如果脚本文件不是绝对文件名,而是在当前目录中搜索,然后在Octave加载路径中搜索。

详见: 系统, 蟒蛇.

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

调用Python脚本脚本文件,可能带有命令线性参数列表。

返回输出输出和中的可选状态status如果脚本文件不是绝对文件名,而是在当前目录中搜索,然后在Octave加载路径中搜索。

编程说明:在UNIX系统上,脚本将从执行蟒蛇3和在Windows上从蟒蛇。您可以通过设置python环境变量,例如从Octave中使用setenv PYTHON/usr/local/bin/python3.

详见: 系统, perl.

 
: fid = popen (command, mode)

启动流程并创建管道。

要运行的命令的名称从给定命令.参数mode可能是

r

该管道将连接到过程的标准输出,并打开进行读取。

w

管道将连接到流程的标准输入端,并打开进行书写。

与进程的输入或输出流相对应的文件标识符在中返回fid.

例如

fid=popen(“ls-ltr/|tail-3”,“r”);而(ischar(s=fgets(fid))fputs(stdout,s);endwhile-|drwxr-xr-x 33根目录3072 2 2月15日13:28 etc-|drw xr-xr-x 3根目录1024 2月15日电13:28 lib-|drw-xrwxrwt 15根目录2048 2月17日14:53 tmp

详见: popen2.

 
: status = pclose (fid)

关闭文件标识符fid从打开popen.

如果成功,fclose返回0,否则返回-1。

编程说明:函数fclose也可以用于相同的目的。

详见: fclose, popen.

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

通过双向通信启动子流程。

进程的名称从给定命令args是包含命令参数的字符串数组或元胞数组。

子流程的输入流和输出流的文件标识符在中返回in出来如果命令的执行成功,pid包含子流程的流程ID。否则pid为−1。

例如

[in,out,pid]=popen2(“排序”,“-r”);fputs(in,“这些\nare\nsome\nstrings”);fclose(in);EAGAIN=错误号(“EAGAIN”);done=false;do s=fgets(out);if(ischar(s))fputs(stdout,s);elseif(errno()==EAGAIN)暂停(0.1);fclear(out);else-done=true;endifuntil(done)fclose(out);waitpid(pid);-|这些-|字符串-|有些-|是

请注意popen2不像popen,不会“收割”孩子的过程。如果你不使用子进程为了检查孩子的退出状态,它将一直停留到Octave退出。

详见: popen, 子进程.

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

查询或设置内部变量,该变量指定在执行外部程序时要附加到shell PATH的以冒号分隔的目录列表。

的初始值取自环境变量Octave执行路径,但该值可以被命令行参数重写--exec路径path.

当从具有的函数内部调用时地方的参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。

详见: 图像路径, Octave主机, OCTAVE_EXEC_HOME.

在大多数情况下,以下函数只需解码它们的参数并进行相应的Unix系统调用。有关如何使用它们的完整示例,请查看函数的定义popen2.

 
: [pid, msg] = fork ()

创建当前流程的副本。

Fork可以返回以下值之一:

> 0

您处于父进程中。返回的值来自是子进程的进程id。您可能应该安排等待任何子进程退出。

0

您正处于子进程中。你可以调用exec以启动另一个进程。如果失败,你可能应该调用出口.

< 0

的呼叫从于某种原因失败了。你必须采取疏散行动。系统相关的错误消息将在中等待消息.

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

用新流程替换当前流程。

使命感exec不需要先调用将终止当前的Octave进程,并将其替换为从命名的程序文件例如

exec(“ls”,“-l”)

将运行ls并将您返回到shell提示符。

如果成功,exec不会返回。如果exec确实返回,犯错误将为非零,并且消息将包含一条系统相关错误消息。

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

创建一个管道,并将管道的读写端返回到读取_fd写入_fd分别地

如果成功,犯错误为0并且消息是空字符串。否则,犯错误为非零并且消息包含系统相关错误消息。

详见: mkfifo.

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

重复文件描述符。

如果成功,fid大于零并且包含新的文件ID。否则,fid为负数,并且消息包含系统相关错误消息。

详见: fopen, fclose, 文件锁.

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

等待进程pid终止。

这个pid参数可以是:

−1

等待任何子进程。

0

等待进程组ID等于Octave解释器进程ID的任何子进程。

> 0

等待ID为的子进程终止pid.

这个param自变量可以是零个或多个以下常量的位“或”:

0

等待,直到接get信号或子进程退出(如果param缺少参数)。

WNOHANG

如果无法立即获得状态,请不要挂起。

集中的

返回任何已停止的子进程的状态,以及自停止以来尚未返回其状态的子进程。

WCONTINUE

如果停止的孩子已通过交付恢复,则返回SIGCONT。此值可能并非对所有系统都有意义。

如果的返回值pid大于0,则为已退出的子进程的进程ID。如果出现错误,pid将小于零并且消息将包含与系统相关的错误消息。的值status包含有关已退出的子进程的其他系统相关信息。

详见: WCONTINUE, WCOREDUMP, WEXITSTATUS, 无线网络, 无线信号, 无线停止, WNOHANG, WSTOPSIG, WTERMSIG, 集中的.

 
: v = WCONTINUE ()

返回的数值WCONTINUE宏。

WCONTINUE是可以传递给的参数参数子进程以表明如果通过交付SIGCONT信号

详见: 子进程, WNOHANG, 集中的.

 
: tf = WCOREDUMP (status)

鉴于status从呼叫到子进程,如果子级生成堆芯转储,则返回true。

只有当无线信号返回true。用于实现此函数的宏在POSIX.1-2001中没有指定,并且在某些Unix实现(例如AIX、SunOS)中不可用。

详见: 子进程, wifi退出, WEXITSTATUS, 无线信号, WTERMSIG, 无线停止, WSTOPSIG, 无线网络.

 
: tf = WEXITSTATUS (status)

鉴于status从呼叫到子进程,返回子级的退出状态。

只有当wifi退出返回true。

详见: 子进程, wifi退出, 无线信号, WTERMSIG, WCOREDUMP, 无线停止, WSTOPSIG, 无线网络.

 
: tf = WIFCONTINUED (status)

鉴于status从呼叫到子进程,如果子进程是通过传递恢复的,则返回trueSIGCONT.

详见: 子进程, wifi退出, WEXITSTATUS, 无线信号, WTERMSIG, WCOREDUMP, 无线停止, WSTOPSIG.

 
: tf = WIFSIGNALED (status)

鉴于status从呼叫到子进程,如果子进程被信号终止,则返回true。

详见: 子进程, wifi退出, WEXITSTATUS, WTERMSIG, WCOREDUMP, 无线停止, WSTOPSIG, 无线网络.

 
: tf = WIFSTOPPED (status)

鉴于status从呼叫到子进程,如果子进程因传递信号而停止,则返回true。

只有在使用完成呼叫时,才可能执行此操作集中的或者当孩子被追踪时(参见ptrace(2))。

详见: 子进程, wifi退出, WEXITSTATUS, 无线信号, WTERMSIG, WCOREDUMP, WSTOPSIG, 无线网络.

 
: tf = WIFEXITED (status)

鉴于status从呼叫到子进程,如果子项正常终止,则返回true。

详见: 子进程, WEXITSTATUS, 无线信号, WTERMSIG, WCOREDUMP, 无线停止, WSTOPSIG, 无线网络.

 
: v = WNOHANG ()

返回的数值WNOHANG宏。

WNOHANG是可以传递给的参数参数子进程以指示它应该立即返回其状态,而不是等待进程退出。

详见: 子进程, 集中的, WCONTINUE.

 
: tf = WSTOPSIG (status)

鉴于status从呼叫到子进程,返回导致孩子停止的信号的编号。

只有当无线停止返回true。

详见: 子进程, wifi退出, WEXITSTATUS, 无线信号, WTERMSIG, WCOREDUMP, 无线停止, 无线网络.

 
: tf = WTERMSIG (status)

鉴于status从呼叫到子进程,返回导致子进程终止的信号的编号。

只有当无线信号返回true。

详见: 子进程, wifi退出, WEXITSTATUS, 无线信号, WCOREDUMP, 无线停止, WSTOPSIG, 无线网络.

 
: v = WUNTRACED ()

返回的数值集中的宏。

集中的是可以传递给的参数参数子进程以指示如果子进程已停止但未通过ptrace系统调用

详见: 子进程, WNOHANG, WCONTINUE.

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

更改打开文件的属性fid.

以下值可以作为要求:

F_DUPFD

返回一个重复的文件描述符。

F_GETFD

返回的文件描述符标志fid.

F_SETFD

设置的文件描述符标志fid.

F_GETFL

返回的文件状态标志fid。以下代码可能会丢失(某些系统上的某些标志可能未定义)。

仅(_R)

仅供阅读。

只读(_O)

仅供书写使用。

O_RDWR

开放阅读和写作。

附加(_A)

在每次写入时附加。

_创建

如果文件不存在,请创建该文件。

_非块

非阻塞模式。

同步(_SYNC)

等待写入完成。

O_ASYNC

异步I/O。

F_SETFL

设置的文件状态标志fid到从指定的值arg。唯一可以更改的标志是附加(_A)_非块.

如果成功,status为0并且消息是空字符串。否则,status为-1并且消息包含与系统相关的错误消息。

详见: 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并且消息是空字符串。否则,status为-1并且消息包含系统相关错误消息。

 
: S = SIG ()

返回一个包含Unix信号名称及其定义值的结构体。


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号