2016-06-21 28 views
2

runner.pyとconnect.pyという2つのpythonスクリプトを書きました。 ランナースクリプトは特定のポートでトラフィックシミュレーションを開始し、もう1つは接続してコマンドを送信できます。両方のスクリプトは私のpython IDEで正常に動作します。しかし、私はjavaから両方のスクリプトを開始してデータを受信したいと思っています。(Jython)JavaからPythonスクリプトを実行する際の問題

両方のスクリプトが起動しますが、connect.pyでエラーが発生します。私はPython IDEからスクリプトを実行することができますが、私のJavaコードからはスクリプトを実行できない理由を明確にしていません。

runner.py

import sys 
import subprocess 
import os 

PORT = 8873 

class Runner: 
__gui = None 

def __init__(self, gui): 
    self.__gui = gui 
    print "Starting runner..." 

def runLocal(self): 
    sumoBinary = os.path.abspath(os.curdir) 
    sumoBinary = sumoBinary.split('de.uniol.inf.is.odysseus.pgtaxi')[0] 
    sumoBinary = sumoBinary + 'de.uniol.inf.is.odysseus.pgtaxi\\sumo\\bin\\sumo-gui' 
    scenario = os.path.abspath(os.curdir) 
    scenario = sumoBinary.split('de.uniol.inf.is.odysseus.pgtaxi')[0] 
    scenario = scenario + 'de.uniol.inf.is.odysseus.pgtaxi\\scenario\\oldenburg.sumocfg' 
    sumoProcess = subprocess.Popen([sumoBinary, "-c", scenario, "--remote-port", str(PORT)], stdout=sys.stdout, stderr=sys.stderr) 

if __name__ == '__main__': 
conn = Runner('None') 
conn.runLocal() 

connect.py

import sys 
import os 

PORT = 8873 

class Connection: 
__gui = None 

def __init__(self, gui): 
    self.__gui = gui 
    print "Starting connect..." 

def initTraci(self): 
    tools = os.path.abspath(os.curdir) 
    tools = tools.split('de.uniol.inf.is.odysseus.pgtaxi')[0] 
    tools = tools + 'de.uniol.inf.is.odysseus.pgtaxi\\sumo\\tools' 
    sys.path.append(tools) 
    import traci 
    traci.init(PORT) 
    step = 0 
    while step < 1000: 
     traci.simulationStep() 
     step += 1 

    traci.close() 
    sys.stdout.flush() 

def getFreePort(self): 
    tools = os.path.abspath(os.curdir) 
    tools = tools.split('de.uniol.inf.is.odysseus.pgtaxi')[0] 
    tools = tools + 'de.uniol.inf.is.odysseus.pgtaxi\\sumo\\tools' 
    sys.path.append(tools) 
    import sumolib 
    PORT = sumolib.miscutils.getFreeSocketPort() 

if __name__ == '__main__': 
conn = Connection('None') 
conn.initTraci() 

私はこの例外を取得:

Exception in thread "MainThread" Traceback (most recent call last): 
    File "C:\Users\FEPREUSS\Desktop\PG\workspace\de.uniol.inf.is.odysseus.pgtaxi\src\de\uniol\inf\is\odysseus\pgtaxi\traci\traci4python\connect.py", line 44, in <module> 
    conn.initTraci() 
    File "C:\Users\FEPREUSS\Desktop\PG\workspace\de.uniol.inf.is.odysseus.pgtaxi\src\de\uniol\inf\is\odysseus\pgtaxi\traci\traci4python\connect.py", line 25, in initTraci 
    traci.init(PORT) 
    File "C:\Users\FEPREUSS\Desktop\PG\workspace\de.uniol.inf.is.odysseus.pgtaxi\sumo\tools\traci\__init__.py", line 65, in init 
    return getVersion() 
    File "C:\Users\FEPREUSS\Desktop\PG\workspace\de.uniol.inf.is.odysseus.pgtaxi\sumo\tools\traci\__init__.py", line 82, in getVersion 
    return _connections[""].getVersion() 
AttributeError: 'NoneType' object has no attribute 'getVersion' 

そして、二つの方法ここで はPythonスクリプトからコードされています怒りの原因となる聖書から:

def init(port=8813, numRetries=10, host="localhost", label="default"): 
    """ 
    Establish a connection to a TraCI-Server and store it under the given 
    label. This method is not thread-safe. It accesses the connection 
    pool concurrently. 
    """ 
    _connections[label] = connect(port, numRetries, host) 
    switch(label) 
    return getVersion() 

def getVersion(): 
    return _connections[""].getVersion() 

誰かが私を助けることを望みます。

+0

エラーメッセージは、SUMOへの接続が失敗したことを示します。それは混乱しているメッセージであり、すでにhttp://sumo.dlr.de/trac.wsgi/ticket/2444に対処するチケットがあります。正確なjython呼び出しを質問に追加し、sumoが実際にrunner.py(プロセスリストに表示される)によって開始されているかどうかを確認できますか? – Michael

+0

jython接続のフルクラスを追加しました。相撲は本当に始まった。また、サーバー上で動作している相撲アプリケーションに接続しようとしましたが、同じエラーメッセージが表示されました。 –

+0

接続しようとすると、相撲が既にアップしていることを確認しますか?遅れて接続しようとしましたか? – Michael

答えて

0

は、失敗したソケット接続のエラーメッセージを隠すSUMOによってマスクされました。残念ながら、あなただけの回避策は、同様SUMOリポジトリにコミットされた

self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP) 

self._socket = socket()を置き換える簡単に他の

ライン49にSUMO /ツール/トレイシー/ connection.pyを編集するよりも、それを回避することはできません。

+0

ありがとうございます。相撲チームのサポートは素晴らしいです。 :) –

関連する問題