簡體   English   中英

使用Symfony Process解析命令行輸出

[英]Parse command line output using Symfony Process

在我的Symfony應用程序中,我需要對文件進行一些操作:目錄中的文件列表,使用gpg對其解密,使用外部軟件解析輸出,然后再次加密。

我的第一個問題是:這是解決此問題的正確方法嗎? 在另一種情況下,我會編寫bash / python腳本來執行此操作,但是由於從Symfony API中讀取了信息(用戶ID,口令等),因此將調用嵌入到應用程序中非常方便。

我的第二個問題更具體:是否有任何方法可以有效地處理命令行輸出和錯誤? 例如,當我調用“ ls”時,如何輕松地將輸出轉換為文件名數組?

private function decryptAction()
{
    $user_data_source = '/Users/myuser/datafiles/';

    // Scan directory and get a list of all files
    $process = new Process('ls ' . $user_data_source);

    try {
        $process->mustRun();
        $files = explode(' ', $process->getOutput());

        return $files;
    } catch (ProcessFailedException $e) {
        return $e->getMessage();
    }
}

找到了第二個問題的答案,但我仍然對您對整個方法的想法非常感興趣。

// Scan directory and get a list of all files
        $process = new Process('ls -1 ' . $user_data_source);

        try {
            $process->mustRun();
            $files = array_filter( explode("\n", $process->getOutput()), 'strlen');
            return $files;
        } catch (ProcessFailedException $e) {
            return $e->getMessage();
        }

除非您真的需要呼叫立即響應,否則最好將此類任務留給后台流程。

因此,我要做的是編寫一個或多個執行所描述過程(讀取,解密等)的Symfony命令。

這些進程可以通過crontab執行,也可以通過其他調度程序(如Supervisord)“守護”。

然后,API調用僅創建觸發實際執行的某種“信號量”文件,甚至更好的是,您可以使用某種隊列系統。

暫無
暫無

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

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