过程组件

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.2,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

过程组件

Process组件在子进程中执行命令。

安装

你可以用两种不同的方式安装组件:

使用

过程类允许你在子进程中执行命令:

1 2 3 4 5 6 7 8 9 10 11
使用欧宝娱乐app下载地址组件过程过程过程过程(ls lsa的);过程->run ();//在命令完成后执行如果(!过程->isSuccessful ()) {\ RuntimeException (过程->getErrorOutput ());}打印过程->getOutput ();

在执行命令时,该组件负责处理不同平台之间的细微差异。

2.2

getIncrementalOutput ()而且getIncrementalErrorOutput ()方法是在Symfony 2.2中添加的。欧宝娱乐app下载地址

getOutput ()方法总是返回命令的标准输出的全部内容和getErrorOutput ()错误输出的内容。或者,getIncrementalOutput ()而且getIncrementalErrorOutput ()方法返回自上次调用以来的新输出。

获得实时流程输出

在执行长时间运行的命令时(如将文件rsync到远程服务器),可以通过将匿名函数传递给最终用户实时反馈run ()方法:

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址组件过程过程过程过程(ls lsa的);过程->运行(函数类型缓冲如果(过程::呃= = =类型) {回声' err > '缓冲;}其他的回声' out > '缓冲;}});

2.1

非阻塞特性是在2.1中添加的。

异步运行进程

您还可以启动子进程,然后让它异步运行,在需要时检索主进程中的输出和状态。使用start ()方法来启动异步进程正在()方法检查进程是否已完成getOutput ()方法获取输出:

1 2 3 4 5 6 7 8
过程过程(ls lsa的);过程->开始();过程->正在()){//等待进程结束回声过程->getOutput ();

你也可以等待一个进程结束,如果你异步启动它,并完成了其他事情:

12 3 4 5 6 7 8 9 10 11 12
过程过程(ls lsa的);过程->开始();/ /……做其他事情过程->等待(函数类型缓冲如果(过程::呃= = =类型) {回声' err > '缓冲;}其他的回声' out > '缓冲;}});

停止进程

方法可以在任何时候停止任何异步进程stop ()方法。该方法以超时作为参数。一旦达到超时,流程就会终止。

$process = new进程('ls -lsa');流程- > start ();

/ /……做其他事情

流程- >停止(3);

单独执行PHP代码

如果要单独执行某些PHP代码,请使用PhpProcess而不是:

1 2 3 4 5 6 7
使用欧宝娱乐app下载地址组件过程PhpProcess过程PhpProcess (< < < EOF < ?php echo 'Hello World';? > EOF);过程->run ();

2.1

ProcessBuilder类是在Symfony 2.1中添加的。欧宝娱乐app下载地址

为了使代码在所有平台上都能更好地工作,可能需要使用ProcessBuilder类:

1 2 3 4
使用欧宝娱乐app下载地址组件过程ProcessBuilder构建器ProcessBuilder (数组“ls”“文理学院”));构建器->getProcess ()->run ();

过程超时

您可以通过设置超时(以秒为单位)来限制进程完成所需的时间:

1 2 3 4 5
使用欧宝娱乐app下载地址组件过程过程过程过程(ls lsa的);过程->setTimeout (3600);过程->run ();

如果达到超时,则aRuntimeException抛出。

对于长时间运行的命令,你有责任定期执行超时检查:

1 2 3 4 5 6 7 8 9 10 11
过程->setTimeout (3600);过程->开始();条件) {/ /……//检查是否超时过程->checkTimeout ();usleep (200000);}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。