2010年11月3日水曜日

[Python, Solaris] pynvpairにnvlistのイテレータ追加

pynvpairにnvlist_next_nvpair()を使ったイテレータを追加したのでforでまわせるようになった。

nvlist_print()の代替実装例。

def nvlist_print(nvlist, indent = 0):
    for type, name, value in nvlist:
        if not isinstance(value, list):
            if type == DATA_TYPE_NVLIST:
                print "%s%s:" % (" " * indent, name)
                nvlist_print(value, indent + 4)
            else:
                print "%s%s: %s" % (" " * indent, name, value)
        else:
            print "%s%s:" % (" " * indent, name)
            indent2 = indent + 4
            for i, v in enumerate(value):
                if type == DATA_TYPE_NVLIST_ARRAY:
                    print "%s[%d]:" % (" " * indent2, i)
                    nvlist_print(v, indent2 + 4)
                else:
                    print "%s[%d]: %s" % (" " * indent2, i, v)

2010年11月1日月曜日

[Python, Solaris] libnvpairのpythonインタフェース

OpenSolaris動作するlibnvpairのpythonインタフェース。
b134で動作確認。

こんな感じ。
>>> from pynvpair import *
>>>
>>> a = nvlist()
>>> a.add(DATA_TYPE_UINT64_ARRAY, "test", (0, 100, 12345))
>>> a.dump()
test[0]: 0
test[1]: 100
test[2]: 12345
>>> a.lookup(DATA_TYPE_UINT64_ARRAY, "test")
[0L, 100L, 12345L]
>>> 
何かに使えそう。