Linux 如何使用SPARC解算器的输出作为python文件的输入?

Linux 如何使用SPARC解算器的输出作为python文件的输入?,linux,python-2.7,answer-set-programming,Linux,Python 2.7,Answer Set Programming,我的问题:我需要将SPARC解算器的输出(当前在终端中显示为文本)保存为Python代码中的变量。我该怎么做 快速提示:SPARC是一个用于ASP(答案集编程)文件的解算器-只要提到这一点,人们就不会感到困惑,以为我指的是ASP.net 我正在同一个终端上同时运行Python文件和ASP文件(在查询模式下),使用命令pythonfile.py | java-jar sparc.jar aspfile.sp。python文件中以sys.stdout.write()形式输出的结果被重定向为SPARC

我的问题:我需要将SPARC解算器的输出(当前在终端中显示为文本)保存为Python代码中的变量。我该怎么做

快速提示:SPARC是一个用于ASP(答案集编程)文件的解算器-只要提到这一点,人们就不会感到困惑,以为我指的是ASP.net

我正在同一个终端上同时运行Python文件和ASP文件(在查询模式下),使用命令
pythonfile.py | java-jar sparc.jar aspfile.sp
。python文件中以
sys.stdout.write()形式输出的结果被重定向为SPARC解算器的输入;i、 e.我输出的文本成为使用ASP代码解决的查询。这是可行的,并生成了我想要的输出,但我不知道如何在Python代码中使用该输出

我发现,这是我问的另一个问题的后续。在这个问题上,我试图找出如何从我的C++代码运行ASP文件。在给出的答案中,我选择了选项2,并且使用重定向标准输出,两个文件作为单独的进程运行。请注意原问题以来的一个重大变化:我现在使用Python而不是C++。 进一步的细节,如果需要的话:我的Python版本是2.7,我的操作系统是Ubuntu 14.04。我不认为这有什么关系,但如果有关系,您应该知道我的Python代码也被用于控制Gazebo Turtletbot模拟,我正在使用ROS Indigo来运行该模拟。除非有人要求,否则我不会发布我的代码,因为我只是想知道我可以使用什么方法(我在互联网上找不到任何有效的方法),而不是需要我的代码调试/协助编写。然而,我将在下面发布一个示例,说明当我的代码运行时输出到终端的内容,因为这是我试图“捕获”的信息

SPARC  V2.52
program translated
?- yes
?- no
我想在Python文件中将答案“是”和“否”另存为变量

解决方案:
对于任何想做同样事情的人,我遵循CaptainTrunky提供的答案。
首先,我运行命令
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

我建议您将SPARK输出转储到文本文件,然后使用您的工具对其进行解析

编写一个shell脚本,为您执行此操作:

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

您可以使用类似于以下脚本(
filter.py
)的python来读取
sys.stdin

然后像这样调用管道:

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

正如一个注释:如果你能用一个常规的ASP-CORE-2求解器生存,CLIGO(SPARC似乎在引擎盖下面使用)有Python,C+C++接口Irrc。对于我个人所知甚少的罗斯来说
python pythonfile.py | java -jar sparc.jar aspfile.sp | python filter.py