2013-07-04 2 views
1

Я бегу питон скрипт в классе Java, как это:Передача аргументов в сценарии Python в Java

PythonInterpreter interp = new PythonInterpreter(); 
PythonInterpreter.initialize(System.getProperties(), System.getProperties(), new String[0]); 
interp.execfile("C:\\Users\\user1\\workspace\\Projectx\\script.py"); 

Проблема заключается в том, что script.py обычно принимает аргументы командной строки, как это:

питон script.py -i C:/diretory/путь -o C:/каталог/путь

можно ли передать эти аргументы через PythonIntepereter в Java?

Update:

Thx к Juned Ahsan мой код теперь выглядит следующим образом:

String[] args = {"-i " + lawlinkerIfolder.toString() + " -o " + lawlinkerOfolder.toString()}; 
PythonInterpreter interp = new PythonInterpreter(); 
PythonInterpreter.initialize(System.getProperties(), System.getProperties(), args); 
interp.execfile("C:\\Users\\user1\\workspace\\Projectx\\script.py"); 

Но сценарий все еще не получает никаких аргументов.

Я использую это правильно?

ответ

1

Последний аргумент в форме ниже вызова для аргументов командной строки:

PythonInterpreter.initialize(System.getProperties(), System.getProperties(), new String[0]); 

От PythronInterpreter javadocs:

инициализации

государственной статической силы инициализации (Свойства preProperties, Свойства postProperties , Строка [] argv)

Инициализирует среду выполнения Jython. Это следует вызывать только один раз, , прежде чем любые другие объекты Python (включая PythonInterpreter) создадут . Параметры: preProperties - набор свойств. Обычно используется System.getProperties(). preProperties переопределяет свойства от файла реестра. postProperties - Еще один набор свойств. Значения , такие как python.home, python.path и все остальные значения из реестра файлы могут быть добавлены в этот набор свойств. postProperties переопределяет свойства системы и свойства реестра. argv - аргументы командной строки, назначенные sys.argv.

+0

спасибо, что выглядит перспективным. Однако я не уверен, как его использовать. Теперь у меня есть 'String [] args = {lawlinkerIfolder.toString(), lawlinkerOfolder.toString()}; но сценарий все еще не работает должным образом. \t \t PythonInterpreter.initialize (System.getProperties(), System.getProperties(), args); ' – pypat

0

Я была такая же проблема, и нашел, что это может быть решена с помощью «интернированы» строку, то есть,

for (int i = 0; i args.length; ++i) { 
    args[i] = args[i].intern(); 
} 

Я использую Jython 2.5.3. Надеюсь, это поможет.