2016-05-04 2 views
2

Я хотел бы назвать питон скрипт из Java с помощью ScriptEngine, но я не знаю, как добавить аргументыВызов питон скрипт с аргументами из Java

Из командной строки это что-то вроде: python test.py language 10 "some text" где язык, 10, «некоторый текст» - это аргументы, которые будут предоставлены пользователем.

Вот кусок кода, который я хочу изменить (см этом answer)

StringWriter writer = new StringWriter(); //ouput will be stored here 

ScriptEngineManager manager = new ScriptEngineManager(); 
ScriptContext context = new SimpleScriptContext(); 

context.setWriter(writer); //configures output redirection 
ScriptEngine engine = manager.getEngineByName("python"); 
engine.eval(new FileReader("test.py"), context); 
System.out.println(writer.toString()); 
+0

Вы также можете сделать это с помощью 'Process p = Runtime.getRuntime(). Exec (" python test.py language 10 \ "some text \" ");' как показано в http://stackoverflow.com/questions/17756721/call-python-from-java-tomcat6-as-sub-process –

+0

благодарит за комментарий. Да, я знаю это, но мне интересно, можно ли это сделать с помощью механизма сценариев. – Daisy

ответ

0

Идя через documentation, то кажется, что это может быть достигнуто с помощью put():

// rest of your code 
ScriptEngine engine = manager.getEngineByName("python"); 
engine.put(ScriptEngine.ARGV, array_of_strings); 
engine.eval(new FileReader("test.py"), context); 
// rest of your code 

Где array_of_strings - массив строк, которые будут использоваться в качестве аргументов.

+0

Спасибо за ваш ответ, я попробовал это, но он выбрасывает NullPointerException – Daisy

+0

@Daisy Какая переменная имеет значение null? – DeepSpace

+0

ссылается на эту строку: engine.put (ScriptEngine.ARGV, array_of_strings); – Daisy

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