Вызов python из Java

Я создаю интерфейс для внутреннего набора инструментов моей компании. Половина инструментов написана на python, а другая половина написана на нескольких других языках сценариев. Поэтому я создаю интерфейс в java с помощью swing. Пока я могу вызывать скрипты python через следующий код:

public class Foo { public static void main(String[] args) { try { Runtime r = Runtime.getRuntime(); Process p = r.exec("python foo.py"); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); p.waitFor(); String line = ""; while (br.ready()) System.out.println(br.readLine()); } catch (Exception e) { String cause = e.getMessage(); if (cause.equals("python: not found")) System.out.println("No python interpreter found."); } } } 

Что работает красиво, но если скрипт python встречает какие-либо ошибки, он не распечатывает их. Как я могу гарантировать, что он также распечатает любые ошибки, которые он имеет?

2 Solutions collect form web for “Вызов python из Java”

Простой ответ – также прочитать Process.getErrorStream .

Более сложный ответ заключается в том, что то, что вы называете Python, вероятно, относится к CPython, который является лишь одной реализацией языка. Существует еще одна реализация Jython, которая в основном компилирует Python в байт-код Java для запуска на JVM. Это позволило бы упростить интеграцию, чем просто вызвать CPython через Runtime.exec Java

PS Runtime.exec – это своего рода старый способ делать вещи. ProcessBuilder часто является более чистым и интуитивным способом запуска ProcessBuilder в Java.

Ответ на предыдущий вопрос: «Хорошо, вот вам предложение о том, чтобы вы освободили любые ресурсы Процесса, например:

  Process process = null; try{ //xxxx }catch(xxx){ }finally{ if(process!=null){ process.destroy(); } } 

Причина в том, что, если вы забыли уничтожить процесс, обработчик файлов будет протекать, вы получите IOException показать слишком много открытых файлов в конце концов.

  • Связать клиент Java с Python-сервером
  • Java FluentWait в Python
  • Как Spring для Python сравнивается с Spring для Java
  • Слияние двух или более xml-файлов и отображение в виде HTML с помощью XSLT
  • Не удалось импортировать классы Java из модуля Jython
  • Эффективное получение XML в Elasticsearch
  • Spark: Как сопоставить Python с определенными функциями Scala или Java?
  • Использование Jython из плагина Eclipse
  • Python - лучший язык программирования в мире.