捕获Jython输出

时间:2013-10-01 13:51:17

标签: java python ajax jython

我正在开发一个用于教授Python的Web应用程序,我必须解决的一个问题是如何从Jython解释器中获取标准输出,一直补充。

目前我在StringBuilder对象中捕获输出,但这种方法只允许我在代码运行完毕时获取输出:

PythonInterpreter interp = new PythonInterpreter(null, new PySystemState());
StringWriter out = new StringWriter();
interp.setOut(out);
interp.exec(pyScript);
String outputStr = out.toString();

我想要的是,在从浏览器收到可运行代码之后,解释器继续在后台运行。如果代码运行需要时间,但输出被捕获并存储在数据库中,则让Ajax代码不断接收有关输出内容的更新。

1 个答案:

答案 0 :(得分:1)

Man,编写我自己的OutputStream实现结果是最佳选择。只需实现write()和flush()方法就足够了。有点像这样:

public class DBOutputStream extends OutputStream
{
    private String buffer;
    private DBConnClass db;

    public DBOutputStream (DBConnClass dbConn)
    {
        buffer = "";
        db = dbConn;
    }

    public void write(int b)
    {
        byte[] bytes = new byte[1];
        bytes[0] = (byte) (b & 0xff);
        buffer = buffer + new String(bytes);

        if (buffer.endsWith("\n"))
        {
            buffer = buffer.substring (0, buffer.length () - 1);
            flush ();
        }
    }   
    public void flush()
    {
        // Commit the buffer to db here
        buffer = "";
    }
}

我想这比从另一个线程读取OutputStream更稳定。现在只有一个线程就足够了,即运行解释器的线程。