Как запустить osm2pgsql для нескольких файлов с помощью pexpect? Застрял на использовании парсера PBF.

Я пытаюсь создать одну таблицу SQL из нескольких файлов .pbf.

Я использую osm2pgsql для загрузки файла в удаленную базу данных и пытаюсь автоматизировать процесс с помощью python и pexpect.

В то время как первая команда osm2pgsql выполняется успешно, последующие команды, похоже, зависают после печати «Использование синтаксического анализатора PBF».

Вот мой код:

child = pexpect.spawn('bash', timeout=20000)
child.logfile_read = sys.stdout.buffer # show output for debugging

filenames = os.listdir('pbf_files')
for i, filename in enumerate(filenames):

    print(filename)
    upload_command_args = [
        "pbf_files/{}".format(filename),
        "-l",
        "-s",
        "-d", db_name,
        "-U", username,
        "-P", port,
        "-H", host,
        "-W",
        "-S", "default.style",
        "-r", "pbf",
        "-p", table_name,
        "--hstore",
        ]

    # Need the append option since table already exists after first iteration
    if i > 0:
        upload_command_args = upload_command_args + ["--append"]

    print(upload_command_args)
    child.sendline('osm2pgsql ' + ' '.join(upload_command_args))
    child.expect('Password:')
    child.sendline('myFakePass')
    child.expect('Osm2pgsql took .+ overall')

child.close()
sys.exit(child.status)

0-я итерация работает нормально, но 1-я зависает после того, как оболочка напечатает:

Reading in file: pbf_files/my_partition_1.pbf
Using PBF parser.

Я неправильно понимаю, как работает .expect()?


person Sasha Trubetskoy    schedule 08.04.2020    source источник


Ответы (1)


добавление занимает намного больше времени, чем первоначальная вставка. Возможно, вы захотите попробовать использовать -C с разумным объемом кеша (по умолчанию 800 МБ). Кроме того, мы говорим о часах после первоначальной вставки. Поэтому, возможно, вы хотели бы убедиться, что вы всегда вставляете самый большой файл первым. Если ваши файлы очень большие, возможно, используйте --slim, чтобы убедиться, что вы не вылетите, когда кеш будет исчерпан.

person Oren_C    schedule 13.05.2020