2016-03-29 11 views
0

jythonを使用してJavaでpythonスクリプトを実行しようとしています。 重要なことは、jythonを使用してスクリプトにコマンドライン引数を渡す必要があることです。 myscript.py arg1 arg2 arg3。 似たような質問があります。Passing arguments to Python script in Javajythonを使用してJavaのpythonスクリプトに引数を渡す方法

これは完全には解決されていませんでした(解決策はありません)。

私のコードは次のようになります。

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); 

しかし、これはPythonスクリプトに引数を渡すようには見えません。 これを正しく行うにはどのような提案がありますか? シンプルである必要がありますが、Web上でドキュメントを見つけることができません。

私はpython 2.7とjython 2.7.0を使用しています。ここで

答えて

1

そうする小さなコードは:

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(); 
     } 
    } 
} 

これはディレクトリ/パスに/に/ myscript.pyと呼ばれるスクリプトPythonスクリプトを呼び出します。

myscript.pyの例:一方

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

この変数の "無効な型です"と表示されます。私はjavaに新しいです、それは他のいくつかの型であるべきですか? –

+0

申し訳ありません私はworkspacePath = arg1 – Stefano

+0

を編集し、待っています...あなたは呼び出したい関数の名前は何ですか?私はあなたが直接スクリプトを呼びたいと思っていません...そうでなければ、Jythonを使う必要はありません...単純にシステムコールを使用します。 – Stefano

1

、私は解決策を発見しました。ここでは、次のとおりです。

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); 

私が行うために必要な何引数として渡されたパラメータに私のスクリプトを追加するだけだった[0](コードの最初の行を参照してください)!

関連する問題