如何使用 pexpect 在多个文件上运行 osm2pgsql?在 "使用PBF解析器 "上卡住了。

问题描述 投票:0回答:1

我试图从多个.pbf文件中创建一个SQL表。

我正在使用 osm2pgsql 将文件加载到远程数据库中,并试图使用 python 和 pexpect 来自动化这个过程。

虽然第一个osm2pgsql命令运行成功,但后续的命令似乎在打印 "Using PBF parser "后卡住了。

这是我的代码。

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次在shell打印后卡住了:

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

我是不是误解了.expect()的工作原理?

python pexpect osm2pgsql osm.pbf
1个回答
0
投票

追加的时间比初始插入的时间要长很多。你可能想尝试使用-C,并使用合理的缓存量(默认是800MB)。另外,我们说的是初始插入后的几个小时。所以,也许你想确保你总是先插入最大的文件。如果你的文件非常大,也许还可以使用--slim来确保缓存耗尽时不会崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.