如何使用 SPARC 求解器的输出作为 python 文件的输入?
How do I use output from SPARC solver as input to a python file?
我的问题:我需要将 SPARC 求解器的输出(当前在终端中显示为文本)保存为我的 Python 代码中的一个变量。我该怎么做?
快速说明:SPARC 是用于 ASP(答案集编程)文件的求解器 - 仅提及这一点是为了让人们不会混淆并认为我指的是 asp.net .
我正在 运行 同时 Python 文件和 ASP 文件(在查询模式下),在同一个终端中,使用命令 python pythonfile.py | java -jar sparc.jar aspfile.sp
。 python 文件的 sys.stdout.write()
形式的输出被重定向为 SPARC 求解器的输入;即我输出的文本成为使用我的 ASP 代码解决的查询。这是有效的,并生成了我想要的输出,但我不知道如何在我的 Python 代码中使用该输出。
这是我提出的另一个问题的后续问题,发现 。在那个问题中,我试图找出如何从我的 C++ 代码中 运行 一个 ASP 文件。我在给出的答案中选择了选项 2,并将重定向的标准输出与两个文件 运行ning 作为单独的进程一起使用。请注意自最初问题以来的一个重大变化:我现在使用 Python 而不是 C++。
如有需要,可提供更多详细信息:我的 Python 版本是 2.7,我的操作系统是 Ubuntu 14.04。我不认为它是相关的,但如果它是相关的,你应该知道我的 Python 代码也被用来控制 Gazebo Turtlebot 模拟,我正在使用 ROS Indigo 来 运行 该模拟.除非有人请求,否则我不会 post 我的代码,因为我只是想知道我可以使用什么方法(我在互联网上找不到任何可用的方法),而不是需要我的代码调试/帮助写它。然而,我将 post 下面的示例说明当我的代码 运行s 时输出到终端的内容,因为这是我试图 'capture'.
的信息
SPARC V2.52
program translated
?- yes
?- no
我想将答案 'yes' 和 'no' 作为变量保存在我的 Python 文件中。
解决方案:
对于任何想做同样事情的人,我遵循了 CaptainT运行ky.
提供的答案
首先我 运行 命令 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
我建议您将 SPARK 输出转储到文本文件,然后使用您的工具对其进行解析。
编写一个 shell 脚本为您完成:
python pythonfile.py | java -jar sparc.jar aspfile.sp > spark.out
python parse_out.py spark.out
您可以使用 python 通过类似于以下 (filter.py
) 的脚本从 sys.stdin
中读取:
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
我的问题:我需要将 SPARC 求解器的输出(当前在终端中显示为文本)保存为我的 Python 代码中的一个变量。我该怎么做?
快速说明:SPARC 是用于 ASP(答案集编程)文件的求解器 - 仅提及这一点是为了让人们不会混淆并认为我指的是 asp.net .
我正在 运行 同时 Python 文件和 ASP 文件(在查询模式下),在同一个终端中,使用命令 python pythonfile.py | java -jar sparc.jar aspfile.sp
。 python 文件的 sys.stdout.write()
形式的输出被重定向为 SPARC 求解器的输入;即我输出的文本成为使用我的 ASP 代码解决的查询。这是有效的,并生成了我想要的输出,但我不知道如何在我的 Python 代码中使用该输出。
这是我提出的另一个问题的后续问题,发现
如有需要,可提供更多详细信息:我的 Python 版本是 2.7,我的操作系统是 Ubuntu 14.04。我不认为它是相关的,但如果它是相关的,你应该知道我的 Python 代码也被用来控制 Gazebo Turtlebot 模拟,我正在使用 ROS Indigo 来 运行 该模拟.除非有人请求,否则我不会 post 我的代码,因为我只是想知道我可以使用什么方法(我在互联网上找不到任何可用的方法),而不是需要我的代码调试/帮助写它。然而,我将 post 下面的示例说明当我的代码 运行s 时输出到终端的内容,因为这是我试图 'capture'.
的信息SPARC V2.52
program translated
?- yes
?- no
我想将答案 'yes' 和 'no' 作为变量保存在我的 Python 文件中。
解决方案:
对于任何想做同样事情的人,我遵循了 CaptainT运行ky.
提供的答案
首先我 运行 命令 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
我建议您将 SPARK 输出转储到文本文件,然后使用您的工具对其进行解析。
编写一个 shell 脚本为您完成:
python pythonfile.py | java -jar sparc.jar aspfile.sp > spark.out
python parse_out.py spark.out
您可以使用 python 通过类似于以下 (filter.py
) 的脚本从 sys.stdin
中读取:
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