2016-03-29 2 views
0

Ich versuche, mein Python-Skript in Java mit Jython auszuführen. Die wichtige Sache ist, dass ich Kommandozeilenargumente zu meinem Skript unter Verwendung von jython, z. myscript.py arg1 arg2 arg3. Es gibt eine ähnliche Frage hier: Passing arguments to Python script in JavaWie übergeben Sie Argumente in Python-Skript in Java mit Jython

Die wurde nicht vollständig beantwortet (keine der Lösungen funktionieren).

Mein Code sieht nun wie folgt aus:

String[] arguments = {"arg1", "arg2", "arg3"}; 
PythonInterpreter.initialize(props, System.getProperties(), arguments); 
org.python.util.PythonInterpreter python = new org.python.util.PythonInterpreter(); 
StringWriter out = new StringWriter(); 
python.setOut(out); 
python.execfile("myscript.py"); 
String outputStr = out.toString(); 
System.out.println(outputStr); 

Dies ist jedoch keine Argumente für das Python-Skript zu passieren scheint. Irgendwelche Vorschläge, wie man es richtig macht? Es muss einfach sein, aber ich kann keine Dokumentation im Internet finden.

Ich benutze Python 2.7 und Jython 2.7.0.

Antwort

1

Hier ein kleiner Code zu tun, so:

import org.python.core.Py; 
import org.python.core.PyException; 
import org.python.core.PyObject; 
import org.python.core.PyString; 
import org.python.core.__builtin__; 
import org.python.util.PythonInterpreter; 

public class JythonTest { 

    public static void main(String[] args) { 
     PythonInterpreter interpreter = new PythonInterpreter(); 
     String fileUrlPath = "/path/to/script"; 
     String scriptName = "myscript"; 
     interpreter.exec("import sys\n" + "import os \n" + "sys.path.append('" + fileUrlPath + "')\n"+ "from "+scriptName+" import * \n"); 
     String funcName = "myFunction"; 
     PyObject someFunc = interpreter.get(funcName); 
     if (someFunc == null) { 
      throw new Exception("Could not find Python function: " + funcName); 
     } 
     try { 
      someFunc.__call__(new PyString(arg1), new PyString(arg2), new PyString(arg3)); 
     } catch (PyException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

nennt dies einen Python-Skript im Verzeichnis/path/to/script der myscript.py genannt wird.

ein Beispiel für myscript.py:

def myscript(arg1,arg2,arg3): 
    print "calling python function with paramters:" 
    print arg1 
    print arg2 
    print arg3 
+0

es heißt "void ist ein ungültiger Typ" für diese Variable. Ich bin neu in Java, sollte es ein anderer Typ sein? –

+0

Tut mir leid, ich habe gerade bearbeitet, workspacePath = arg1 – Stefano

+0

und warten ... Was ist der Name der Funktion, die Sie anrufen möchten? Ich dünme nicht, dass Sie das Skript direkt aufrufen wollen ... sonst brauchen Sie Jython nicht zu benutzen ... benutzen Sie einfach einen Systemaufruf – Stefano

1

In der Zwischenzeit habe ich eine Lösung gefunden. Hier ist sie:

String[] arguments = {"myscript.py", "arg1", "arg2", "arg3"}; 
PythonInterpreter.initialize(System.getProperties(), System.getProperties(), arguments); 
org.python.util.PythonInterpreter python = new org.python.util.PythonInterpreter(); 
StringWriter out = new StringWriter(); 
python.setOut(out); 
python.execfile("myscript.py"); 
String outputStr = out.toString(); 
System.out.println(outputStr); 

Was ich brauchte, einfach zu tun, war mein Skript zu den übergebenen Parametern wie arg hinzufügen [0] (siehe die erste Zeile des Codes)!

Verwandte Themen