【问题标题】:CMD from PHP script - get feedback来自 PHP 脚本的 CMD - 获取反馈
【发布时间】:2017-01-02 02:18:39
【问题描述】:

我有很多(近 300 个)旧 SVN 存储库可以使用 git2svn 迁移到 git。

在考虑了 GOLANG 和 PYTHON 之后,我最终决定最简单的方法是使用 PHP 。可能是一个 bad 值得商榷的决定,但这似乎很容易。

所以,15 分钟后,我 did have a script 或多或少在测试中运行正常。丑陋的脚本,但它是一次性的。

问题是这个过程需要很多时间,即使是简单的几乎空的 repos 也可能需要 30 秒。甚至一分钟。大型的——甚至 10 分钟——所以在投入生产之前,我希望有一些反馈机制——这样我才能真正看到发生了什么。

..到目前为止,脚本确实会像这样输出命令反馈:

$cmd = "cd ".$GITrepoPath." && svn2git svn://127.0.0.1/". $repoName . " --username " .$SVNusername ." --authors authors.txt --notags --nobranches --notrunk";
            $output = shell_exec($cmd);
            echo "<pre>$output</pre>";

..但这只是在每个回购完成处理之后..不像真正的cmd执行,我可以看到这些步骤。

我发现的唯一可能与我需要的问题很接近的问题是here - 但老实说 - 我对答案的理解并不多......

我知道这只是一个一次性脚本 - 但用例让我对如何实际实现这一点感兴趣(如果可能的话)。

我在win7本地机器上,但如果可能的话,我也想知道*nix。

【问题讨论】:

    标签: php git command-line-interface feedback


    【解决方案1】:

    shell_exec 等到进程关闭。您必须创建进程并听取它,与 CMD 相同。这样使用exec函数:

    $cmd = ''; // your command here
    $output_storage = [];
    $output_showed = [];
    $result = null;
    exec($cmd, $output_storage, $result);
    while( $result === null ){
        $diff = array_diff($output_storage, $output_showed);
        if( $diff ){
            // all new outputs here as $diff
            $output_showed = $diff;
        }
    }
    

    【讨论】:

      【解决方案2】:

      我建议改为在后台运行脚本或程序来运行命令,然后更新数据库中的记录,然后您可以使用 AJAX 或其他方式轮询服务器以获取记录更改。这为用户提供了一个良好的环境。

      数据库表中的列可以命名为“完成”之类的名称,一旦该布尔值为真,您就知道它的完整,并且输出可以存储在数据库中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-16
        • 2019-04-09
        • 2012-08-27
        • 2012-04-05
        • 1970-01-01
        相关资源
        最近更新 更多