2017-04-22 2 views
0

Meine Frage: Ich muss die Ausgabe von einem SPARC-Solver (der momentan als Text im Terminal erscheint) als Variable in meinem Python-Code speichern. Wie kann ich das machen?Wie verwende ich die Ausgabe von SPARC Solver als Eingabe für eine Python-Datei?

Kurzinfo: SPARC ist ein Solver, der für ASP-Dateien (answer-set-programming) verwendet wird - ich erwähne dies nur, damit die Leute nicht verwirrt werden und denken, dass ich mich auf asp.net beziehe.

Ich führe eine Python-Datei und eine ASP-Datei (im Abfragemodus) gleichzeitig im selben Terminal mit dem Befehl python pythonfile.py | java -jar sparc.jar aspfile.sp. Die Ausgabe aus der Python-Datei in Form von sys.stdout.write() wird als Eingabe für den SPARC-Solver umgeleitet. der von mir ausgegebene Text wird zur Abfrage, die mit meinem ASP-Code gelöst wird. Dies funktioniert und erzeugt die gewünschte Ausgabe, aber ich kann nicht herausfinden, wie diese Ausgabe in meinem Python-Code verwendet wird.

Dies ist eine Follow-up zu einer anderen Frage, die ich gestellt habe, gefunden here. In dieser Frage habe ich versucht, herauszufinden, wie man eine ASP-Datei von meinem C++ - Code aus ausführt. Ich ging mit der Option 2 in die Antwort, die ich erhielt, und verwende umgeleitetes stdout mit den zwei Dateien, die als separate Prozesse laufen. Bitte beachten Sie eine wichtige Änderung seit der ursprünglichen Frage: Ich verwende jetzt Python anstelle von C++.

Weitere Details bei Bedarf: Meine Python-Version ist 2.7 und mein Betriebssystem ist Ubuntu 14.04. Ich glaube nicht, dass es relevant ist, aber falls doch, sollten Sie wissen, dass mein Python-Code auch dazu verwendet wird, eine Gazebo-Turtlebot-Simulation zu steuern, und ich verwende ROS Indigo, um diese Simulation auszuführen. Ich poste meinen Code nicht, wenn jemand ihn nicht anfordert, da ich nur eine Vorstellung davon haben möchte, welche Methode ich verwenden könnte (ich kann nichts finden, was im Internet funktioniert), anstatt meinen Code debuggen zu müssen. Ich werde jedoch unten ein Beispiel von dem, was an das Terminal ausgegeben wird, wenn mein Code läuft, veröffentlichen, da dies die Information ist, die ich zu "erfassen" versuche.

Es ist die Antworten 'Ja' und 'Nein', die ich als Variablen in meiner Python-Datei speichern möchte.

LÖSUNG:
Für alle, die das Gleiche machen wollten, folgte ich der Antwort von CaptainTrunky.
Zuerst führe ich den Befehl python pythonfile.py | java -jar sparc.jar aspfile.sp > sparc.out, Speichern der SPARC-Ausgabe in die Textdatei sparc.out.
Dann starte ich python outputParser.py, um ein Skript zu starten, das den Inhalt der Textdatei ausgibt, so dass ich überprüfen kann, ob ich die Daten richtig manipuliere. Das Skript ist sehr einfach:

lines = [line.strip('?- ') for line in open('sparc.out')] 
lines = [line.strip('\n') for line in lines] 
print lines 
+0

Nur als eine Anmerkung: Wenn Sie überleben können Mit einem regulären ASP-Core-2-Solver hat clingo (das SPARC unter der Haube zu verwenden scheint) Python-, C & C++ - Schnittstellen IIRC. Für ROS, von dem ich persönlich wenig weiß, gibt es http://www.cs.uni-potsdam.de/rosoclingo/ – vukk

Antwort

1

Sie Python verwenden können, von sys.stdin mit einem Skript ähnlich dem folgenden (filter.py) zu lesen:

import sys 
for line in sys.stdin.readlines(): 
    if line.startswith('?- '): 
    print line.strip() 

Dann rufen Sie Ihre Pipeline wie folgt:

python pythonfile.py | java -jar sparc.jar aspfile.sp | python filter.py 
0

Ich würde vorschlagen, Sie SPARK Ausgabe Textdatei tun Dump und dann mit Ihnen Werkzeug zu analysieren es.

schreiben ein Shell-Skript, das es für Sie tut:

python pythonfile.py | java -jar sparc.jar aspfile.sp > spark.out 
python parse_out.py spark.out 
Verwandte Themen