Я использую Jython 2.5.2, а runScript
не существует, поэтому мне пришлось заменить его на execfile
.Помимо этого различия, мне также нужно было установить argv
в объекте состояния перед созданием объекта PythonInterpreter
:
String scriptname = "myscript.py";
PySystemState state = new PySystemState();
state.argv.append (new PyString ("arg1"));
state.argv.append (new PyString ("arg2"));
PythonInterpreter interpreter = new PythonInterpreter(null, state);
InputStream is = Tester.class.getClassLoader().getResourceAsStream(scriptname);
interpreter.execfile (is);
Список argv
в объекте состояния изначально имеет длину 1,с пустой строкой в этом, так что предыдущий код приводит к выводу:
hello
['', 'arg1', 'arg2']
Если вам нужно argv[0]
в качестве фактического имени скрипта, вам нужно создать такое состояние:
PySystemState state = new PySystemState();
state.argv.clear ();
state.argv.append (new PyString (scriptname));
state.argv.append (new PyString ("arg1"));
state.argv.append (new PyString ("arg2"));
Тогда вывод:
hello
['myscript.py', 'arg1', 'arg2']