Невозможно увидеть операторы print и println в Eclipse с помощью JEP/Pydev
Я изучаю JEP и плагин PyDev eclipse и новичок в Python.
Я не вижу свои операторы печати python и java println на вкладке консоли Eclipse.
Поскольку я просто пробую что-то, я создаю простой скрипт Python, создав новый модуль PyDev, и в нем всего одна строка (greetings.py):
print("Hello from python");
Когда я запускаю это, я вижу это в консоли, когда я запускаю его как с точки зрения PyDev, так и с точки зрения Jave EE.
Далее, поскольку цель этого упражнения - изучить JEP, чтобы увидеть, подходит ли он для моего проекта, поэтому я создал еще один проект Java с этим кодом:
package my.sand.box;
import jep.Interpreter;
import jep.Jep;
import jep.JepException;
import jep.SharedInterpreter;
public class JepTest {
public static void main(String[] args) throws JepException {
// TODO Auto-generated method stub
System.out.println("hey");
try (Interpreter interp = new SharedInterpreter()) {
//interp.exec("import example_package");
// any of the following work, these are just pseudo-examples
interp.runScript("full/path/to/greetings.py");
interp.eval("import sys");
interp.eval("s = 'Hello World'");
interp.eval("print s");
String java_string = interp.getValue("s").toString();
System.out.println("Java String:" + java_string);
}
}
}
I don't see anyting on the console. Not even the java println statements.
I also recreated both projects in a new workspace and could see the output. What's different between both workspaces is that in the one that's not workign I have other java projects and pydev projects open. Would appreciate any advice.
2 ответа
Раньше я сталкивался с подобной проблемой, работая с Jep, трюк в том, что вам нужно перенаправить выходной поток Python в вашу среду IDE, вызвав правильный метод.
Взгляните на https://github.com/ninia/jep/issues/298
Как упомянул Клодовский, вам нужно перенаправить вывод Python в поток, используемый IDE. Я адаптировал ваш пример для этого. Ключевой строкой является призыв к
SharedInterpreter.setConfig
:
package my.sand.box;
import jep.Interpreter;
import jep.JepConfig;
import jep.JepException;
import jep.SharedInterpreter;
public class JepTest {
public static void main(String[] args) throws JepException {
System.out.println("hey");
// Eclipse doesn't use stdout & stderr, so use the streams from Java.
SharedInterpreter.setConfig(new JepConfig()
.redirectStdErr(System.err)
.redirectStdout(System.out));
try (Interpreter interp = new SharedInterpreter()) {
// interp.exec("import example_package");
// any of the following work, these are just pseudo-examples
// Uncomment if you've created a greetings.py script.
// interp.runScript("full/path/to/greetings.py");
interp.eval("import sys");
interp.eval("s = 'Hello World'");
interp.eval("print(s)");
String java_string = interp.getValue("s").toString();
System.out.println("Java String:" + java_string);
}
}
}