Как использовать выходные данные из решателя SPARC в качестве входных данных для файла Python?

Мой вопрос: мне нужно сохранить выходные данные из решателя SPARC (который в настоящее время отображается как текст в терминале) как переменную в моем коде Python. Как я могу это сделать?

Краткое примечание: SPARC - это решатель, используемый для файлов ASP (программирование набора ответов) - просто упомяните об этом, чтобы люди не запутались и не подумали, что я имею в виду asp.net.

Я запускаю файл Python и файл ASP (в режиме запросов) одновременно на одном терминале с помощью команды python pythonfile.py | java -jar sparc.jar aspfile.sp, Вывод из файла python в виде sys.stdout.write() перенаправляется как вход в решатель SPARC; т.е. выводимый мной текст становится запросом, который решается с использованием моего ASP-кода. Это работает и генерирует вывод, который я хочу, но я не могу понять, как использовать этот вывод в моем коде Python.

Это продолжение другого вопроса, который я задал. В этом вопросе я пытался выяснить, как запустить файл ASP из моего кода C++. Я выбрал вариант 2 в ответе, который мне дали, и использую перенаправленный стандартный вывод с двумя файлами, работающими как отдельные процессы. Обратите внимание на одно существенное изменение с момента первоначального вопроса: теперь я использую Python вместо C++.

Дополнительная информация, если требуется: Моя версия Python 2.7 и моя операционная система Ubuntu 14.04. Я не думаю, что это уместно, но, если это так, вы должны знать, что мой код Python также используется для управления симуляцией Gazebo Turtlebot, и я использую ROS Indigo для запуска этой симуляции. Я не буду публиковать свой код, пока кто-то не запросит его, так как я просто хочу понять, какой метод я мог бы использовать (я не могу найти ничего, что работает в Интернете), вместо того, чтобы отлаживать мой код или помогать писать его. Однако ниже я опубликую пример того, что выводится на терминал при запуске моего кода, так как это информация, которую я пытаюсь "захватить".

SPARC  V2.52
program translated
?- yes
?- no

Это ответы "да" и "нет", которые я хочу сохранить как переменные в моем файле Python.

РЕШЕНИЕ:
Для тех, кто хочет сделать то же самое, я следовал ответу, предоставленному CaptainTrunky.
Сначала я запускаю команду python pythonfile.py | java -jar sparc.jar aspfile.sp > sparc.out, сохраняя вывод SPARC в текстовый файл sparc.out.
Тогда я бегу python outputParser.py запустить скрипт, который печатает содержимое текстового файла, что позволяет мне проверить, правильно ли я манипулирую данными. Сценарий очень прост:

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

2 ответа

Решение

Вы можете использовать Python для чтения из sys.stdin со скриптом, похожим на следующее (filter.py):

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

Затем вызовите ваш конвейер так:

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

Я бы посоветовал вам сделать вывод SPARK в текстовый файл и затем проанализировать его с помощью вашего инструмента.

Напишите скрипт оболочки, который сделает это за вас:

python pythonfile.py | java -jar sparc.jar aspfile.sp > spark.out
python parse_out.py spark.out
Другие вопросы по тегам