有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java捕获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) 个答案

  1. # 1 楼答案

    老兄,我自己编写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 = "";
        }
    }
    

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