2017-08-15 5 views
0

私はPythonスクリプトをJavaから実行しようとしています。何かがJavaで変更されるときに、Pythonプログラムに情報を送信したいと思います。私はそれに最適な解決策を知らない。私はpythonスクリプトを実行し、それに開始情報を送ることができますが、その後問題が始まります。私は、TCP/IP接続を介してデータを送信することを考えるが、私はPythonスクリプトでエラーを持っていることをやろうとき:最新のcomunnication java to python

Caused by: Traceback (most recent call last): 
File "pythonScript.py", line 2, in <module> 
import socket 
ImportError: No module named socket 

at org.python.core.Py.ImportError(Py.java:264) 
at org.python.core.imp.import_first(imp.java:657) 
at org.python.core.imp.import_name(imp.java:741) 
at org.python.core.imp.importName(imp.java:791) 
at org.python.core.ImportFunction.__call__(__builtin__.java:1236) 
at org.python.core.PyObject.__call__(PyObject.java:367) 
at org.python.core.__builtin__.__import__(__builtin__.java:1207) 
at org.python.core.__builtin__.__import__(__builtin__.java:1190) 
at org.python.core.imp.importOne(imp.java:802) 
at org.python.pycode._pyx0.f$0(pythonScript.py:27) 
at org.python.pycode._pyx0.call_function(pythonScript.py) 
at org.python.core.PyTableCode.call(PyTableCode.java:165) 
at org.python.core.PyCode.call(PyCode.java:18) 
at org.python.core.Py.runCode(Py.java:1197) 
at org.python.core.__builtin__.execfile_flags(__builtin__.java:538) 
at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:156) 
at sample.PythonClass.runPythonScript(PythonClass.java:26) 
at sample.Controller.handleSubmitButtonActionIp(Controller.java:30) 
... 58 more 

だから、scoketのインポートといくつかの問題ですが、私はnormalyこのプログラムを実行するときになしありエラー。それは私がPythonスクリプトを実行するために使用する関数のコードです:

public void runPythonScript(boolean isCameraOn, String ip){ 
    System.out.println(ip); 
    String[] arguments = {ip}; 
    PythonInterpreter.initialize(System.getProperties(),System.getProperties(), arguments); 
    PythonInterpreter python = new PythonInterpreter(); 
    StringWriter out = new StringWriter(); 
    python.setOut(out); 
    python.execfile("pythonScript.py"); 
    String outputStr = out.toString(); 
    System.out.println(outputStr); 
} 

そして、それはPythonクライアントのコードです:

import sys 
import socket //ERROR 

print("poczatek") 
print(sys.argv[0]) 
print("koniec") 

HOST = "localhost" 
PORT = 8080 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.setblocking(0) 
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
sock.connect((HOST, PORT)) 

sock.sendall("Hello\n") 
data = sock.recv(1024) 
print("1)", data) 

if (data == "olleH\n"): 
    sock.sendall("Bye\n") 
    data = sock.recv(1024) 
    print("2)", data) 

if (data == "eyB}\n"): 
    sock.close() 
    print("Socket closed") 

Javaサーバ:

public void sendDataToPythonScript(boolean isCameraOn, String ip) throws 
IOException { 
    String fromClient; 
    String toClient; 

    ServerSocket server = new ServerSocket(8080); 
    System.out.println("wait for connection on port 8080"); 

    boolean run = true; 
    while(run) { 
     Socket client = server.accept(); 
     System.out.println("got connection on port 8080"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
     PrintWriter out = new PrintWriter(client.getOutputStream(),true); 

     fromClient = in.readLine(); 
     System.out.println("received: " + fromClient); 

     if(fromClient.equals("Hello")) { 
      toClient = "olleH"; 
      System.out.println("send olleH"); 
      out.println(toClient); 
      fromClient = in.readLine(); 
      System.out.println("received: " + fromClient); 

      if(fromClient.equals("Bye")) { 
       toClient = "eyB"; 
       System.out.println("send eyB"); 
       out.println(toClient); 
       client.close(); 
       run = false; 
       System.out.println("socket closed"); 
      } 
     } 
    } 
    System.exit(0); 
} 

答えて

1

は、埋め込まれたソケットモジュール

をインポートしてみ
import _socket 

それが修正されない場合は、Pythonモジュールのパスを設定してみてくださいthis linkは、Javaでpythonのパスを設定する方法を説明する必要があります。

+0

ありがとうございます、私はpythonのパスを設定し、今は動作しています。後で作業コードで投稿を編集します。 – Marcin46