Не удается получить данные BTree для сохранения в MicroPython - PullRequest
0 голосов
/ 29 ноября 2018

Я разрабатываю приложение в MicroPython на ESP32, где буфер публикуемых данных должен сохраняться при перебоях с питанием / перезагрузках.

BTree кажется очевидным решением, но в моих тестах я могуне удается сохранить данные, записанные в базу данных BTree, фактически они вообще не записываются в файл.

Вот пример кода теста;Я был бы очень признателен, если кто-нибудь может предложить какую-либо помощь, пожалуйста:

import btree

try:
    f = open("buffer.db", "r+b")
except OSError:
    f = open("buffer.db", "w+b")
db = btree.open(f)

db[b"1"] = b"first"
db[b"2"] = b"second"
db[b"3"] = b"third"
db[b"4"] = b"fourth"
db[b"5"] = b"fifth"

db.flush()

print('The database contains the following:')

for k in db:
    key = k.decode('utf-8')
    val = db[k].decode('utf-8')
    print('Key:', key, 'Value:', val)

print('End of data.')

db.close()
f.close()`

Все это, кажется, работает нормально, с ожидаемым выходным значением для REPL:

The database contains the following:
Key: 1 Value: first
Key: 2 Value: second
Key: 3 Value: third
Key: 4 Value: fourth
Key: 5 Value: fifth
End of data.

Но если язатем попробуйте следующее:

f = open("buffer.db", "r+b")
db = btree.open(f)

print('The database contains the following:')

for k in db:
    key = k.decode('utf-8')
    val = db[k].decode('utf-8')
    print('Key:', key, 'Value:', val)

print('End of data.')

db.close()
f.close()

... выходные данные в REPL:

The database contains the following:
End of data.

При проверке файла БД "buffer.db" он имеет размер 0 байтов.

Я уверен, что я делаю ошибку школьника, но я не могу определить ее на всю жизнь.

Большое спасибо заранее за вашу помощь.

=========

ОБНОВЛЕНИЕ

В дополнение к предложению, в другом месте, я сейчас проверил это на Unix-порт MicroPython (работает на Ubuntu), и этоотлично работает, в том числе успешно записывает данные в файл db Btree.

Очевидно, что это проблема, относящаяся к порту MicroPython для ESP32.

...