1

TitanGraphDB + Cassandraを使用しています。次のようにTitanを起動しています

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

上記の Titan + Cassandra との通信に使用できる Rexster シェルがあります。

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

Python プログラムから Titan Graph DB をプログラムしたいのですが、そのために電球パッケージを使用しています。

以下に示すように、電球を使用してPythonから頂点を作成します。

 fe1 = self.g.vertices.get_or_create('switch_dpid',switch_dpid,
          {'actionOutputPort':actionOutputPort,
           'switch_state':'FE_SWITCH_UPDATED',
           'matchInPort': MatchInPort,
           'type': 'flow_entry',
           'user_state':'FE_USER_ADD',
'actions': ['type':'ACTION_OUTPUT', 'action':[port=actionOutputPort maxLen=0];]})

これは私にエラーを与えています

  'actions': ['type':'ACTION_OUTPUT', 'action':[port=actionOutputPort maxLen=0];]}) 
  SyntaxError: invalid syntax

Rexster コンソールから期待される出力は次のとおりです。

switch_dpid=00:00:00:00:00:00:02:05,
actionOutputPort=1,
switch_state=FE_SWITCH_UPDATED,
matchInPort=2,
flow_entry_id=0x4ee30a9400000012,
type=flow_entry,
actions=[[type=ACTION_OUTPUT action=[port=1 maxLen=0]];],
user_state=FE_USER_ADD

上記のようになるようにプログラムするにはどうすればよいactionsですか。

4

1 に答える 1

2

Groovy 構文と Python を混同しています。

actionsは辞書でactionあり、辞書であるため、Pythonでは次のようになります。

'actions': {'type': 'ACTION_OUTPUT', 
            'action': {port: actionOutputPort,
                       maxLen: 0}}

dict通常は、次の関数を使用して Python 辞書を作成する方が便利 (引用符が少ない) であることに注意してください。

'actions' = dict(type = 'ACTION_OUTPUT',
                 action = dict(port = actionOutputPort, 
                               maxLen = 0))
于 2014-07-02T22:04:25.123 に答える