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

时间:2015-12-27 23:30:44

标签: php python

我有一个调用Python脚本的PHP脚本,该脚本循环通过文本文件输出特定的行到网页。 PHP脚本调用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))

相关的Python代码就是这个......

private void createEvents() 
{
    menuFileExit.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent arg0) 
        {
            System.exit(0);
        }
    });
    ////// Events on tree selection
    jtStoryViewer.addTreeSelectionListener(new TreeSelectionListener() 
    {
        public void valueChanged(TreeSelectionEvent arg0) 
        {
            DefaultMutableTreeNode selection = (DefaultMutableTreeNode) jtStoryViewer.getLastSelectedPathComponent();
            Object nodeObject = selection.getUserObject();



            ////// Checks if selected node is a String (only story title is a string)
            if(selection.getUserObject().getClass().getName() == "java.lang.String" )
            {
                tfTitle.setText(nodeObject.toString());


                ////// Action listener for Change Button
                btnChange.addActionListener(new ActionListener() 
                {
                    ////// Title text swap
                    public void actionPerformed(ActionEvent arg0) 
                    {
                        selection.setUserObject(tfTitle.getText());
                        ((DefaultTreeModel)jtStoryViewer.getModel()).nodeChanged(selection);
                    }
                });
            }
            ///// checks if the object is a chapter object
            if(selection.getUserObject().getClass().getName() == "ISW.common.Chapter")
            {
                Chapter chapter = (Chapter) selection.getUserObject();
                tfTitle.setText(chapter.toString());



                ////// Action listener for Change Button
                btnChange.addActionListener(new ActionListener() 
                {
                    ////// Title text swap
                    public void actionPerformed(ActionEvent arg0) 
                    {
                        chapter.setTitle(tfTitle.getText());
                        ((DefaultTreeModel)jtStoryViewer.getModel()).nodeChanged(selection);

                    }
                });
            }


        }
    }); 
}

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

1 个答案:

答案 0 :(得分:1)

这可能与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脚本中的问题,你应该发布更多它以使其更容易调试。