Передача данных из процесса Java в сценарий python - PullRequest
0 голосов
/ 16 января 2020

Я называю внешний сценарий Python как процесс Java и хочу отправить данные на него. Я создаю процесс и пытаюсь отправить строку. Позже скрипт python должен дождаться нового ввода от Java, поработать с этими данными и снова ждать (пока истинно l oop).

Python Код (test.py):

input = input("")
print("Data: " + input)

Java Код:

Process p = Runtime.getRuntime().exec("py ./scripts/test.py");

BufferedWriter out = new BufferedWriter(new
        OutputStreamWriter(p.getOutputStream()));
BufferedReader stdInput = new BufferedReader(new
        InputStreamReader(p.getInputStream()));

System.out.println("Output:");
String s = null;
out.write("testdata");
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}

Процесс и вывод простых отпечатков работает, но не с input и BufferedWriter. Можно ли отправить данные на этот python вход с помощью Java процесса?

Я читаю из других решений:

  • создаю Python слушатель и отправляю сообщения этому сценарию
  • импортируем внешний сценарий в Jython и передаем данные

Это лучшие решения для решения моей проблемы?

Ответы [ 2 ]

2 голосов
/ 16 января 2020

использовать класс процесса в java

что такое класс процесса? этот класс используется для запуска .exe или любого сценария с использованием java

Как это может помочь вам Создайте сценарий python для принятия переменных командной строки и отправки данных из класса java в сценарий python.

Например:

        System.out.println("Creating Process"); 

        ProcessBuilder builder = new ProcessBuilder("my.py"); 
        Process pro = builder.start(); 

        // wait 10 seconds 
        System.out.println("Waiting"); 
        Thread.sleep(10000); 

        // kill the process 
        pro.destroy(); 
        System.out.println("Process destroyed"); 
0 голосов
/ 16 января 2020

Позже сценарий python должен ожидать новый ввод от Java

Если это должно произойти, пока процесс python все еще является подпроцессом Java обработайте, тогда вам придется использовать перенаправление ввода / вывода, используя ProcessBuilder.redirect*( Redirect.INHERIT ) или ProcessBuilder.inheritIO(). Например:

Process p = new ProcessBuilder().command( "python.exe", "./scripts/test.py" )
        .inheritIO().start();

Если процесс python будет отдельным (я думаю, что дело здесь не в этом), вам придется использовать какой-то механизм для взаимодействия между ними, например клиент / сервер. или общий файл, et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...