1

我刚刚开始使用 imposm 来帮助将 openstreetmap 数据导入 postgis 数据库。所有文档都指向通过终端发出所有命令。这对于一次性导入来说很好,但我计划有很多不同边界框的导入,并且想编写脚本加载数据库中的数据。

目前我使用:

imposm --overwrite-cache --read --write -d postgis_test --user postgres -p ""  /Users/Me/MapnikTest/osmXML.osm

从命令行可以正常工作,但由于 osmXML.osm 被创建了很多次,我想以某种方式在创建时导入它。

将相同的东西放在 python 脚本中:

os.system("imposm --overwrite-cache --read --write -d postgis_test --user postgres -p ""  /Users/Ali\ Mac\ Pro/Desktop/MapnikTest/osmXML.osm")

只是返回:

/bin/sh: imposm: command not found

解决这个问题将是自动化数据采集以按需渲染小地图的最后一步,但我遇到了最后的障碍!

** 编辑 imposm 的完整路径解决了第一个问题,但在出现提示时会为 postgres 用户输入密码。有没有办法在同一个单行命令中发送密码?(也许这需要一个新帖子?如果有人指出我正确的方向,我会很高兴)**

4

2 回答 2

0

这可能是因为os.system()调用/bin/sh它使用的 shell 环境与您在命令行上工作时使用的不同。

要解决此问题,请在您的脚本中获取脚本的完整路径imposm,然后在您的命令中使用它。使用可以使用一些这样的代码来查找可执行文件。

或者您可以修复您的外壳定义,以便/bin/sh正确PATH定义,但这在很大程度上取决于您的设置......

于 2016-01-10T05:49:48.393 回答
0

在进一步研究和@Eli Rose 的评论的帮助下解决了(非常感谢):找出通向 imposm 的路径(或您尝试执行的任何命令)

which <command>

然后在 python shell 命令中包含路径。使用来自子进程的模块,您甚至可以看到完整的终端输出。

import subprocess
from subprocess import *
print Popen("/usr/local/bin/imposm --overwrite-cache --read --write --connection postgis://<database user>:<password>@<host>/<database> /path/to/data.osm", stdout=PIPE, shell=True).stdout.read()

--connection postgis://<database user>:<password>@<host>/<database>

意味着您可以在一行中执行命令,而不必担心在以下命令中输入数据库用户密码。

于 2016-01-10T17:35:00.033 回答