Как использовать выходные данные из решателя 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