php - 如何让 PHP 停止自动截断输出

标签 php python

我有一个 PHP 脚本,它调用一个 Python 脚本,该脚本循环遍历一个文本文件,将特定行输出到网页。 PHP 脚本调用 Python 脚本并回显其输出,如下所示...

$output = shell_exec($command);
echo ($output);

相关的Python代码是这样的...

for myStr in myList:
    myObj=re.match(r'(\s|\S)+\[(?P<specificVal>\d+)(\s|\S)+',myStr)
    specificVal = int(myObj.group('specificVal'))
    if specificVal in range(min,max):
        print ('<p>%s</p>' % (myStr))

这适用于大约一百行,然后停止输出,当可能有几千行时。有没有更好的方法来做到这一点,或者我只需要编辑一些 php.ini 选项?谢谢!

最佳答案

这可能与 shell_exec() 由于某种原因未返回所有输出有关。您可以尝试使用更强大的 proc_open() :

<?php

$fileDescriptors = array(
   0 => array("pipe", "r"), // STDIN
   1 => array("pipe", "w"), // STDOUT
   2 => array("pipe", "w")  // STDERR
);
$pipes = array();
flush();

$process = proc_open($command, $fileDescriptors, $pipes, realpath('.'), array());
if (!is_resource($process))
{
    error_log("Failed to execute '$command'");
    return;
}

while ($data = fgets($pipes[1]))
{
    print $data;
    flush();
}

如果不在每次循环迭代中调用 flush();,您可能会获得一些性能优势。

如果这仍然没有给您提供所有输出,我会怀疑 Python 脚本中存在问题,您应该发布更多内容以使其更易于调试。

关于php - 如何让 PHP 停止自动截断输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34485998/

相关文章:

php - 如何获取第二个Query的结果

php - DataTables:通过ajax加载数据时为行添加自定义属性

php - CakePHP:在插入数据之前向外部 API 发出请求

python - 如何按照列表的顺序重命名文件夹中的多个文件

python - GenericRelatedObjectManager 不是 JSON 可序列化的

php - codeigniter:带有百分比的评级计数

php - 将动态字段数据插入数据库问题?

python - operator[] 的 Swig 警告抑制

python - 使用 autoretry_for 正确处理 Celery 异常

python - 在脚本以 Python 启动后,在特定时间安排打印命令