我的问题:我需要将SPARC解算器(当前在终端中显示为文本)的输出保存为Python代码中的变量。我怎么能这样做?
快速说明:SPARC是一个用于ASP(答案集编程)文件的求解器 - 只需提及这一点,这样人们就不会感到困惑,并认为我指的是asp.net。
我使用命令python pythonfile.py | java -jar sparc.jar aspfile.sp
在同一终端中同时运行Python文件和ASP文件(在查询模式下)。来自sys.stdout.write()
形式的python文件的输出被重定向为SPARC求解器的输入;即我输出的文本成为使用我的ASP代码解决的查询。这是有效的,并生成我想要的输出,但我无法弄清楚如何在我的Python代码中使用该输出。
这是我提出的另一个问题的后续问题,here。在那个问题中,我试图找出如何从我的C ++代码运行ASP文件。我在给出的答案中使用了选项2,并使用重定向的stdout将两个文件作为单独的进程运行。请注意自原始问题以来的一个重大变化:我现在使用的是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
答案 0 :(得分:1)
您可以使用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
答案 1 :(得分:0)
我建议您将SPARK输出转储到文本文件,然后用你的工具解析它。
编写一个shell脚本,为您完成:
python pythonfile.py | java -jar sparc.jar aspfile.sp > spark.out
python parse_out.py spark.out