Вызов скрипта гремлина из программы на питоне, использующей лампочки

Я использую TitanGraphDB + Cassandra. Я запускаю Titan следующим образом.

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

У меня есть оболочка Rexster, которую я могу использовать для связи с Titan+Cassandra, описанной выше.

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

Я пытаюсь смоделировать топологию сети с помощью базы данных Titan Graph. Я хочу запрограммировать базу данных Titan Graph из моей программы на Python. Для этого я использую пакет bulbs. Я создаю три типа вершин

 - switch
 - port 
 - device

Я создаю помеченные ребра между портами, которые физически соединены. Я использую метку «ссылка».

Допустим, у меня есть две вершины порта portA и portB.

Я хочу проверить, подключен ли portA к portB из моего python program с помощью пакета лампочек.

В качестве первого шага пишу скрипт (сохранил в файле is_connected.sh)

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

Если я попытаюсь выполнить приведенный выше скрипт с моей rexster-консоли следующим образом, я получу следующий результат.

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

Это моя самая первая попытка написать хранимую процедуру (также известную как скрипт гремлина). Я не знаю, правильный ли это подход. Также моей конечной целью было бы иметь возможность вызывать этот скрипт из моей программы на Python, которая использует лампочки. Если бы кто-нибудь мог указать мне правильное направление, это было бы здорово!


person liv2hak    schedule 15.07.2014    source источник
comment
Непонятно, что вы хотите сделать. Ваш код имеет синтаксис Python, но использует методы, определенные в Groovy (retain, hasNext), и вы хотите запустить его в консоли rexster, которая понимает Groovy, а не Python. Обратите внимание, что лампочки реализуют небольшое подмножество методов (inV, outV, ...) изначально в Python, но даже если вы используете лампочки, вам придется писать более крупные сценарии в правильном Groovy.   -  person Tohotom    schedule 16.07.2014
comment
Вышеприведенный хороший совет от @Tohotom, но мне все еще нравится этот вопрос и подход. Это меньший шаг на пути к чему-то чуть более сложному. Заставьте это работать, а затем беспокойтесь о том, как делать что-то с лампочками.   -  person stephen mallette    schedule 17.07.2014


Ответы (1)


Команда ?e требует, чтобы вы указали исполняемый файл в той же строке. Я создал sum.groovy:

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

затем из консоли:

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

Странно, что указание ?e без файла не приводит к правильному переводу строки. Я постараюсь пойти исправить это.

person stephen mallette    schedule 16.07.2014
comment
Моя конечная цель - иметь возможность использовать скрипт из моего кода Python, как указано bulbflow.com/api/ лампочки/гремлин. Будет ли это работать сейчас? - person liv2hak; 17.07.2014
comment
Это не работает для меня. Для меня это говорит rexster[groovy]› ?e sum.groovy не может прочитать указанный файл - person liv2hak; 17.07.2014
comment
Я сохранил sum.groovy в текущем рабочем каталоге. Все еще говорю, что не может прочитать указанный файл - person liv2hak; 17.07.2014
comment
Ваша конечная цель не была ясна в вашем вопросе. Ваш вопрос был о rexster-console, поэтому я ответил так. Что касается этого вопроса, и он все еще не работает для вас, я не уверен, что может быть не так, за исключением того, что файл находится не там, где ожидалось. Вы говорите, что sum.groovy находится в текущем рабочем каталоге, но где это? Он должен быть в корне дистрибутива rexster-console... это где он? Если он есть и это все еще проблема, почему бы не попробовать использовать явный абсолютный путь? - person stephen mallette; 17.07.2014