2
我正在开发一个用于教学Python的Web应用程序,我必须解决的一个问题是如何从Jython解释器中捕获标准输出,这一点在补充的时候就已经解决了。正确捕获Jython输出
目前我捕捉到输出StringBuilder
对象,但这种做法让我只得到输出时的代码运行完毕:
PythonInterpreter interp = new PythonInterpreter(null, new PySystemState());
StringWriter out = new StringWriter();
interp.setOut(out);
interp.exec(pyScript);
String outputStr = out.toString();
我想吃点什么,就是以后可运行代码从浏览器收到,解释器仍在后台运行。如果代码需要花费时间运行,但输出被捕获并存储在数据库中,让Ajax代码不断接收有关输出内容的更新。
您是否尝试过调用exec并从不同线程的OutputStream中读取数据? – SimonC
不,我没有。我有这样的想法,我可以创建自己的OutputStream类,不管写到它的数据库都会不择手段地提交到数据库,但是我希望避免它,因为有足够的方法可以阻止我这样做。还有PythonInterpreter.setOut(PyObject outStream)方法,但我不确定如何使用它。 – Passiday
查看http://docs.oracle.com/javase/7/docs/api/java/io/PipedOutputStream.html,如果您要从另一个线程的输出流中读取数据,您将使用它。请记住,在同一个线程中写入数据库可能会导致你的python代码被阻塞(当然这可能是可以接受的)。 – SimonC