Вызов 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 показать слишком много открытых файлов в конце концов.

  • Использование ресурсов google Go vs Python и Java на Appengine
  • Библиотека для рендеринга Directed Graphs (похожа на graphviz) на Google App Engine
  • фонетическое правописание в Python и Java
  • Уравнение аппроксимации свободной энергии в реляционных системах Больцмана
  • Что эквивалентно проекту Celery Python для Java?
  • Java-эквивалент отображения функций в Python
  • Какую библиотеку я должен использовать для написания XLS из Linux / Python?
  • Перевести алгоритмический C на Python
  • Как передать args методу в java, например f (* args) в python?
  • Самый быстрый способ сжать размер видео с помощью библиотеки или Algo
  • Python: как я могу выполнить файл jar через скрипт python
  •  
    Interesting Posts for Van-Lav

    В scipy.stats rv_continuous имеет подходящий метод для поиска MLE, но rv_discrete этого не делает. Зачем?

    Использование службы определения местоположения Windows в скрипте Python

    График в реальном времени matplotlib не работает, пока он все еще находится в цикле

    Что такое `-a` в функции Zshell и что это связано с моей оболочкой, немедленно выходящей?

    Ошибка сохранения django

    Переопределение метакласса по умолчанию () перед запуском Python

    Метод Python super и альтернативы вызова

    Добавление файла jar в pyspark после контекста создается

    Сервер Socket SIP для Python

    Python (pip) бросает , даже если обновлена ​​цепочка сертификатов

    где хранить статические файлы в приложении django, Как подключать статические файлы из нескольких местоположений от nginx

    Список Tkinter

    Matplotlib: `pcolormesh.get_array ()` возвращает сплющенный массив – как вернуть данные 2D?

    Умножить каждый элемент списка на число

    Захват результата магической функции IPython

    Python - лучший язык программирования в мире.