问题
I am using TitanGraphDB + Cassandra.I am starting Titan as follows
cd titan-cassandra-0.3.1
bin/titan.sh config/titan-server-rexster.xml config/titan-server-cassandra.properties
I have a Rexster shell that I can use to communicate to Titan+Cassandra above.
cd rexster-console-2.3.0
bin/rexster-console.sh
I am attempting to model a network topology using Titan Graph DB.I want to program the Titan Graph DB from my python program.I am using bulbs package for that. I create three types of vertices
- switch
- port
- device
I create labelled edges between ports that are connected physically.The label that I use is "link".
Let us say I have two port vertices portA
and portB
.
I want to check if portA
is connected to portB
from my python program
using bulbs package.
As a first step.I write a script (saved in a file is_connected.sh
)
def is_connected(portA, portB):
return portA.both("link").retain([portB]).hasNext()
If I try to execute the above script from my rexster-console as follows,I get the following result.
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
This is my very first attempt at writing a stored procedure (a.k.a gremlin script).I don't know if this is the right way to approach it.Also my final aim would be to be able to call this script from my python program that uses bulbs.If someone could point me in the right direction that would be great!
回答1:
The ?e
command requires that you specify the file to execute in the same line. I created sum.groovy
:
def sum(x,y) { x+y }
then from the console:
rexster[groovy]> ?e sum.groovy
==>null
rexster[groovy]> sum(1,2)
==>3
Strange that specifying ?e
without the file doesn't do a proper line feed. I'll try to go fix that.
来源:https://stackoverflow.com/questions/24769857/calling-a-gremlin-script-from-python-program-that-uses-bulbs