2016-07-29 3 views
2

Я использую Python 3.4.Как вызвать скрипт Python с аргументами из класса Java

У меня есть сценарий Python myscript.py:

import sys 
def returnvalue(str) : 
    if str == "hi" : 
     return "yes" 
    else : 
     return "no" 
print("calling python function with parameters:") 
print(sys.argv[1]) 
str = sys.argv[1] 
res = returnvalue(str) 
target = open("file.txt", 'w') 
target.write(res) 
target.close() 

Мне нужно вызвать этот питон скрипт из Java класса PythonJava.java

public class PythonJava 
{ 
    String arg1; 
    public void setArg1(String arg1) { 
     this.arg1 = arg1; 
    } 
public void runPython() 
    { //need to call myscript.py and also pass arg1 as its arguments. 
     //and also myscript.py path is in C:\Demo\myscript.py 
} 

и я звоню runPython() из другого класса Java путем создания объекта от PythonJava

obj.setArg1("hi"); 
... 
obj.runPython(); 

Я пробовал много способов, но никто из них не работает должным образом. Я использовал Jython, а также ProcessBuilder, но сценарий не записывался в файл .txt. Можете ли вы предложить способ правильно реализовать это?

+1

Плохая идея вызывать переменную (в Python) 'str', потому что она будет маскировать класс системной строки с тем же именем. – cdarke

ответ

0

Вы посмотрели на них? Они предлагают различные способы сделать это:

Call Python code from Java by passing parameters and results

How to call a python method from a java class?

Короче одно решение может быть:

public void runPython() 
{ //need to call myscript.py and also pass arg1 as its arguments. 
    //and also myscript.py path is in C:\Demo\myscript.py 

    String[] cmd = { 
     "python", 
     "C:/Demo/myscript.py", 
     this.arg1, 
    }; 
    Runtime.getRuntime().exec(cmd); 
} 

редактировать: просто убедитесь, что вы измените имя переменной от ул к чему-то иначе, как отмечено cdarke

Ваш код на Python (измените str на что-то другое, например arg и укажите путь для файла):

def returnvalue(arg) : 
    if arg == "hi" : 
     return "yes" 
    return "no" 
print("calling python function with parameters:") 
print(sys.argv[1]) 
arg = sys.argv[1] 
res = returnvalue(arg) 
print(res) 
with open("C:/path/to/where/you/want/file.txt", 'w') as target: # specify path or else it will be created where you run your java code 
    target.write(res) 
+0

Я изменил имя переменной, и когда я запустил программу, я получаю следующую ошибку: java.io.IOException: не удается запустить программу «python C: /Demo/myscript.py»: CreateProcess error = 2, система не могу найти указанный файл Можете ли вы мне помочь? –

+0

есть C: /Demo/myscript.py правильный путь? если да, попробуйте 'C: \\ Demo \\ myscript.py', хотя слэши не должны быть проблемой. Я проведу его локально через минуту. – mkaran

+0

Пожалуйста, проверьте отредактированный ответ, каждая команда/аргумент должен быть отдельным, мой плохой! Я попробовал, и все работает нормально. – mkaran

Смежные вопросы