【问题标题】:Calling a gremlin script from python program that uses Bulbs从使用灯泡的 python 程序调用 gremlin 脚本
【发布时间】:2014-09-06 08:04:39
【问题描述】:

我正在使用 TitanGraphDB + Cassandra。我正在按如下方式启动 Titan

cd titan-cassandra-0.3.1
bin/titan.sh config/titan-server-rexster.xml config/titan-server-cassandra.properties

我有一个 Rexster shell,可以用来与上面的 Titan+Cassandra 通信。

cd rexster-console-2.3.0
bin/rexster-console.sh

我正在尝试使用 Titan Graph DB 对网络拓扑进行建模。我想从我的 python 程序中对 Titan Graph DB 进行编程。我正在为此使用灯泡包。 我创建了三种类型的顶点

 - switch
 - port 
 - device

我在物理连接的端口之间创建带标签的边缘。我使用的标签是“链接”。

假设我有两个端口顶点portAportB

我想使用灯泡包检查portA 是否从我的python program 连接到portB

作为第一步。我写了一个脚本(保存在一个文件is_connected.sh

def is_connected(portA, portB):
    return portA.both("link").retain([portB]).hasNext()

如果我尝试从我的 rexster-console 执行上述脚本,如下所示,我会得到以下结果。

sudo ./start_rexter.sh 
        (l_(l
(_______( 0 0
(        (-Y-) <woof>
l l-----l l
l l,,   l l,,
opening session [127.0.0.1:8184]
?h for help

rexster[groovy]> ?e
specify the file to executerexster[groovy]> is_connected.sh
==>An error occurred while processing the script for language [groovy]. All transactions across all graphs in the session have been concluded with failure: java.util.concurrent.ExecutionException: javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: is_connected for class: Script2

这是我第一次尝试编写存储过程(又名 gremlin 脚本)。我不知道这是否是处理它的正确方法。我的最终目标是能够从我的使用灯泡的 python 程序。如果有人能指出我正确的方向,那就太好了!

【问题讨论】:

  • 不清楚你想做什么。您的代码是 Python 语法,但使用了 Groovy 中定义的方法(retain、hasNext),并且您希望在理解 Groovy 而不是 Python 的 rexster 控制台中运行它。请注意,bulbs 在 Python 中本机实现了一小部分方法(inV、outV、...),但即使您使用灯泡,也必须在适当的 Groovy 中编写较大的脚本。
  • 以上是@Tohotom 的好建议,但我仍然喜欢这个问题和方法。这是通往稍微复杂一点的道路上的一小步。让它工作,然后担心如何用灯泡做事。

标签: cassandra gremlin titan bulbs


【解决方案1】:

?e 命令要求您指定要在同一行中执行的文件。我创建了sum.groovy

def sum(x,y) { x+y }

然后从控制台:

rexster[groovy]> ?e sum.groovy
==>null
rexster[groovy]> sum(1,2)
==>3

奇怪的是,在没有文件的情况下指定 ?e 并不能正确换行。我会努力解决这个问题。

【讨论】:

  • 我的最终目标是能够使用给定bulbflow.com/api/bulbs/gremlin 的python 代码中的脚本。现在可以吗?
  • 这对我不起作用。对我来说它说 rexster[groovy]> ?e sum.groovy 无法读取指定的文件
  • 我将 sum.groovy 保存在当前工作目录中。“仍然说无法读取指定的文件”
  • 您的“最终目标”在您的问题中并不明确。你的问题是关于 rexster-console 所以我这样回答。关于那个问题,它仍然对你不起作用,我不确定可能出了什么问题,除了文件不在预期的位置。您说sum.groovy 在当前工作目录中,但那在哪里?它应该在 rexster-console 发行版的根目录中……它在哪里?如果它在那里并且仍然是一个问题,为什么不尝试使用显式绝对路径?
猜你喜欢
  • 2015-05-30
  • 2015-02-19
  • 2012-10-29
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
相关资源
最近更新 更多