过程组件
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.1,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
过程组件
流程组件在子流程中执行命令。
安装
你可以用两种不同的方式安装组件:
- 使用官方Git存储库(https://github.com/ob娱乐下载symfony/Process);
- 通过Composer安装(
ob娱乐下载symfony /过程
在Packagist).
使用
的过程类允许你在子进程中执行命令:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\过程\过程;$过程=新过程(ls lsa的);$过程->run ();//在命令完成后执行如果(!$过程->isSuccessful ()) {扔新\ RuntimeException ($过程->getErrorOutput ());}打印$过程->getOutput ();
在执行命令时,该组件负责处理不同平台之间的细微差异。
获得实时流程输出
在执行长时间运行的命令时(如将文件rsync到远程服务器),可以通过将匿名函数传递给最终用户实时反馈run ()方法:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\过程\过程;$过程=新过程(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
使用ob娱乐下载\组件\过程\PhpProcess;$过程=新PhpProcess (< < < EOF < ?php echo 'Hello World';? > EOF);$过程->run ();
2.1
的ProcessBuilder
类是在Symfony 2.1中添加的。ob娱乐下载
为了使代码在所有平台上都能更好地工作,可能需要使用ProcessBuilder类:
1 2 3 4
使用ob娱乐下载\组件\过程\ProcessBuilder;$构建器=新ProcessBuilder (数组(“ls”,“文理学院”));$构建器->getProcess ()->run ();
过程超时
您可以通过设置超时(以秒为单位)来限制进程完成所需的时间:
1 2 3 4 5
使用ob娱乐下载\组件\过程\过程;$过程=新过程(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许可证。