簡體   English   中英

子流程輸出未“實時”返回

[英]Sub process output not being returned 'real-time'

我只是在測試Symfony Process Component,它似乎並沒有按照錫說的做。

文件狀態

當執行長時間運行的命令(例如將文件同步到遠程服務器)時,可以通過將匿名函數傳遞給run()方法來實時向最終用戶提供反饋:

我有以下文件1

$process = new Process('php terminal.php');
$process->setTimeout(null);
$process->run( function ( $type, $buffer ) {
    if (Process::ERR === $type) {
        echo 'ERR > '.$buffer;
    } else {
        echo 'OUT > '.$buffer;
    }
});

另一個與以下

$x = 10;
while( $x ) {
    echo "{$x}\n";
    sleep(1);
    $x--;
}

等待10秒鍾后通過端子運行此命令時,輸出為

OUT > 10
OUT > 9
OUT > 8
OUT > 7
OUT > 6
OUT > 5
OUT > 4
OUT > 3
OUT > 2
OUT > 1

這表明上面有10次閉包迭代,但是在過程完成之前沒有輸出。

我在這里想念什么嗎?

問候,路加福音

您需要使用:

flush();
ob_flush();

在您的第一個代碼上:

$process = new Process('php terminal.php');
$process->setTimeout(null);
$process->run( function ( $type, $buffer ) {
    if (Process::ERR === $type) {
        echo 'ERR > '.$buffer;
    } else {
        echo 'OUT > '.$buffer;
    }
    flush();
    ob_flush();
});

在第二天:

$x = 10;
while( $x ) {
    echo "{$x}\n";
    flush();
    ob_flush();
    sleep(1);
    $x--;
}

在php.net上的更多信息: ob_flushflush

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM