如何使用pexpect在多个文件上运行osm2pgsql?卡在“使用PBF解析器”上

2024-09-22 14:34:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在使用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次迭代正常运行,但第一次迭代在shell打印后卡住:

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

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


Tags: 命令childforsysargsfilesfilenamecommand
1条回答
网友
1楼 · 发布于 2024-09-22 14:34:00

追加要比初始插入花费更长的时间。您可能希望尝试使用-C并使用合理的缓存量(默认值为800MB)。此外,我们还讨论了首次插入后的几个小时。因此,您可能希望确保始终先插入最大的文件。如果您的文件非常大,那么也可以使用slim来确保在缓存耗尽时不会崩溃

相关问题 更多 >