Запуск скрипта python как exe с параметрами из Java

Я нашел несколько советов, как это сделать, но объединить их вместе не получится, поэтому я прошу помощи.

У меня есть скрипт на Python, который получает переменные из параметров (аргументов?) (Sys.argv). Я использовал PyInstaller для создания exe.

Теперь мне нужно открыть этот файл с параметрами из java.

Проблема в том, что я получил сообщение об ошибке: Не удалось выполнить скрипт [ScriptName].

Это мой код из java:

try {
    ProcessBuilder process = new ProcessBuilder(Location, arg1, arg2, arg3, arg4,
                                                arg5, arg6, arg7, arg8, arg9,
                                                arg10, arg11, arg12, arg13, arg14);
    Process proc = process.start();
    proc.waitFor();
} catch (IOException | InterruptedException e) {
    //logging the result
    e.printStackTrace();
}

А это мой код на Python:

arg1 = sys.argv[2]
arg2 = sys.argv[3]
arg3 = sys.argv[4]
arg4 = sys.argv[5]
arg5 = sys.argv[6]
(...)

Я пробовал разные «позиции argv» (например, arg1 = sys.argv [1] и т. д.), Но ничего не работает.

Заранее благодарю за любую помощь.

Посмотрите пожалуйста ссылку stackoverflow.com/questions/27267391/…

Ramesh Subramanian 09.01.2019 14:53

Что такое Location? Это твой сценарий?

deHaar 09.01.2019 15:01

Местоположение - это местоположение exe-файла (созданного pyInstaller)

Kontaro 09.01.2019 15:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
191
2

Ответы 2

Вы можете попытаться составить вызов String со всеми вашими аргументами, подобными этому (вы должны использовать StringBuilder или что-то подобное для аккуратного кода):

String call = "python yourscript.py argument1 argument2 argument3";
Process p = Runtime.getRuntime().exec(call);

До сих пор это всегда работало для меня, даже без необходимости в .exe. Кроме того, вы должны иметь возможность запускать .exe точно так же.

Ничего из упомянутого не сработало, я решил сделать это с помощью txt-файла (написать txt на java и прочитать его на python).

Я думаю, что лучшим вариантом было бы передать данные по базе данных, но в этом случае это был не вариант :(

КСТАТИ. Я также пробовал получать значения с помощью argparse вместо sys.arg, но я думаю, что проблема была в java (сценарий даже не был выполнен).

Другие вопросы по теме