【问题标题】:How do I use output from SPARC solver as input to a python file?如何使用 SPARC 求解器的输出作为 python 文件的输入?
【发布时间】:2017-04-22 03:16:01
【问题描述】:

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

快速说明:SPARC 是用于 ASP(答案集编程)文件的求解器 - 只是提到这一点是为了让人们不会感到困惑并认为我指的是 asp.net。

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

这是我提出的另一个问题的后续,发现 here。在那个问题中,我试图找出如何从我的 C++ 代码运行 ASP 文件。我在给出的答案中选择了选项 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

【问题讨论】:

  • 请注意:如果您可以使用常规的 ASP-Core-2 求解器生存,则 cligo(SPARC 似乎在后台使用)具有 python、C 和 C++ 接口 IIRC。对于我个人所知甚少的ROS,有cs.uni-potsdam.de/rosoclingo

标签: linux python-2.7 answer-set-programming


【解决方案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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      相关资源
      最近更新 更多