首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php中打印输出到两个不同的终端?

如何在php中打印输出到两个不同的终端?
EN

Stack Overflow用户
提问于 2020-04-21 13:31:44
回答 2查看 154关注 0票数 1

我正在使用amphp/并行函数在并行中运行两个。我想知道如何才能看到实时输出并行打印?我正在考虑用两个不同的终端打印。这有可能吗?如果没有,我如何跟踪输出,如果它是平行或顺序运行?

代码语言:javascript
复制
<?php
require "vendor/autoload.php";

use Amp\Promise;
use Amp\ParallelFunctions;

$promises[1] = ParallelFunctions\parallel(function (){

    for ($i=0; $i<50; $i++){
        echo 'Promise-1 : '. $i . PHP_EOL;
    }

})();

$promises[2] = ParallelFunctions\parallel(function (){

    for ($i=0; $i<50; $i++){
        echo 'Promise-2 : '. $i .PHP_EOL;
    }

})();

Promise\wait(Promise\all($promises));

当前输出似乎是连续的。

代码语言:javascript
复制
Promise-1 : 0
Promise-1 : 1
Promise-1 : 2
Promise-1 : 3
Promise-1 : 4
Promise-2 : 0
Promise-2 : 1
Promise-2 : 2
Promise-2 : 3
Promise-2 : 4

Note我使用的是mac,这纯粹是为了在本地进行测试。

EN

回答 2

Stack Overflow用户

发布于 2020-04-21 14:06:17

免责声明:到终端的打印本质上将非常依赖于操作系统,而不是一个非常稳定的系统:当用户关闭终端时,您会做什么?如果您已经在第一个终端上运行了其他东西,会发生什么情况?

在这里,你可以这样做:

在大多数版本的linux上,您可以将虚拟文件写入/dev/ at /(例如/dev/at/1),以便在任何开放终端上输出。您可以通过打开两个终端实例并在第二个实例中键入以下内容来尝试它:

代码语言:javascript
复制
echo "testing" > /dev/pts/0

这应该在第一个终端上打印测试。但是,它不能在mac上工作,因为没有/dev/pt文件夹,但是您可以在第二个终端中键入以下内容:

代码语言:javascript
复制
echo "testing" > /dev/ttys000

或在php中:

代码语言:javascript
复制
$fp = fopen('dev/ttys000');
fwrite($fp, "testing\n");
fclose($fp);

如果这在Windows上是可能的话,那么它几乎肯定比写入文件要复杂得多。

通常,我建议在这种情况下将输出写入单独的日志文件,而不是终端。

票数 1
EN

Stack Overflow用户

发布于 2020-04-27 19:16:43

amphp/parallel使用子进程并行运行这些进程。子进程的STDOUT和STDERR分别通过管道传输到父进程的STDOUT和STDERR。由于流是以块形式读取和写入的,输出顺序很可能不代表实际的执行顺序。

如果将sleep调用放入for循环中,则很可能能够观察交错执行顺序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61344804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档