【问题标题】:Perl Output in PHP (Dynamically)as the perl Script completes its iteration当 perl 脚本完成迭代时,PHP 中的 Perl 输出(动态)
【发布时间】:2010-12-08 10:33:36
【问题描述】:

我有许多在 linux 上运行的 perl 脚本,它们执行许多任务, 他们每个人都需要大约 10 分钟(进行备份和类似的东西..)并输出每个步骤.. 这样用户就可以看到脚本当时正在做什么......

我现在正在做的是通过shell_exec()命令从php调用perl脚本, 发生的情况是在脚本完成工作后显示输出,并且该浏览器继续加载 10 分钟,这不是交互式的。

所以我想在 perl 脚本运行时将输出直接从浏览器获取,这意味着无论 perl 脚本有什么输出,我想在我的网页上显示它,这意味着尽快或可能在 2 秒后。

p>

【问题讨论】:

    标签: php perl


    【解决方案1】:

    这个我没试过,但是大概你应该可以使用popen打开一个管道来读取Perl脚本的输出并回显到浏览器。

    Randal Schwartz 的 Watching long processes through CGI 展示了在 Perl 中实现更复杂的方法。

    【讨论】:

    • 思南,popen 方法不起作用,没有尝试过第二种方法,乍一看似乎更复杂,但会研究一下。
    【解决方案2】:

    您可以尝试passthru(),它是 exec 的一种变体,可以立即输出任何控制台输出(或者我相信如此)。确保未启用任何输出缓冲。否则尝试 proc_open 并轮询文件句柄。

    如果这不起作用,请将 Perl 备份脚本的输出重定向到一个临时文件,并通过 AJAX/something 轮询它以更新网页。

    否则我不确定我们如何帮助您将 10 分钟的运行时间缩短到 2 秒。

    【讨论】:

    • Mario,passthru() 不起作用,proc_open 也不起作用,因为它们倾向于将进程发送到后台;好吧,我有使用 AJAX 的想法,但我无法直接输出 100 个脚本;所以那个选项不存在。
    猜你喜欢
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2017-11-21
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多