Ich versuche SUMO über Traci-Schnittstelle zu starten. Ich kopiere dieses Beispiel aus dieser link kopiert. Der Code ist wie folgtFehler: IOStream hat keine Datei - SUMO
import os, sys
import subprocess
if 'SUMO_HOME' in os.environ:
tools = os.path.join(os.environ['SUMO_HOME'], 'tools')
sys.path.append(tools)
else:
sys.exit("please declare environment variable 'SUMO_HOME'")
PORT = 8813
sumoBinary = "C:/Program Files (x86)/DLR/Sumo/bin/sumo-gui"
sumoProcess = subprocess.Popen([sumoBinary, "-c", "example.sumocfg", \
"--remote-port", str(PORT)], stdout=sys.stdout, stderr=sys.stderr)
import traci
import traci.constants as tc
traci.init(PORT)
traci.vehicle.subscribe(vehID, (tc.VAR_ROAD_ID, tc.VAR_LANEPOSITION))
print(traci.vehicle.getSubscriptionResults(vehID))
for step in range(3):
print("step", step)
traci.simulationStep()
print(traci.vehicle.getSubscriptionResults(vehID))
traci.close()
Wenn ich versuche, den Code auszuführen, es wirft mir den folgenden Fehler
File "C:\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
execfile(filename, namespace)
File "C:\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 85, in execfile
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
File "C:/Users/Raja/Documents/vehicomPhd/SUMOTraffic/traci.py", line 22, in <module>
"--remote-port", str(PORT)], stdout=sys.stdout, stderr=sys.stderr)
File "C:\Anaconda3\lib\subprocess.py", line 823, in __init__
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
File "C:\Anaconda3\lib\subprocess.py", line 1037, in _get_handles
c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
File "C:\Anaconda3\lib\site-packages\IPython\kernel\zmq\iostream.py", line 205, in fileno
raise UnsupportedOperation("IOStream has no fileno.")
UnsupportedOperation: IOStream has no fileno.
Wer weiß, was falsch ist.
Danke, dass Sie darauf hingewiesen haben. Ich habe 'stdout = sys.stdout, stderr = sys.stderr' mit' stdin = subprocess.PIPE, stdout = subprocess.PIPE' ersetzt und dieser Fehler wird nicht angezeigt. Allerdings habe ich jetzt einen anderen Fehler. 'Datei "C: /Users/Raja/Documents/vehicomPhd/SUMOTraffic/traci.py", Zeile 28, in traci.init (8813) Datei„C: \ Program Files (x86) \ DLR \ Sumo \ tools \ traci \ __ init__.py ", Zeile 469, in init return getVersion() TypeError: 'bytes' Objekt kann nicht implizit in str konvertiert werden. –
Mechanic
@Mechanic: Nicht genug Kontext, um etwas Bestimmtes zu geben, aber Zeug das kommt einem sofort in den Sinn: 1. Du machst eine Version von 'traci', die für Python 2 auf einem Python 3-Interpreter geschrieben ist (was oft nur mit' SyntaxError's abschneidet, aber nicht immer) 2. Du verwendest das ' PIPE-ed behandelt (binärer Modus) oder Daten von ihnen ("Bytes") in einem Kontext, der Textmodus-Handles oder "str" -Daten erfordert. Wenn das der Fall ist, besteht die einfachste Lösung darin, ['universal_newlines = True'] (https://docs.python.org/3/library/subprocess.html#frequently-used-arguments) an den' Popen'-Konstruktor zu übergeben Öffnen Sie Textmodus-Streams. – ShadowRanger
Das Problem liegt an der Inkosistenz zwischen Python 2 und 3 und Sie haben richtig darauf hingewiesen. – Mechanic