Невозможно увидеть операторы 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);
        }
    }
}
Другие вопросы по тегам