繁体   English   中英

从python脚本运行imposm命令

[英]run imposm commands from a python script

我刚刚开始使用imposm帮助将openstreetmap数据获取到postgis数据库中。 所有文档都指向通过Terminal进行所有命令。 这对于一次导入就可以了,但是我计划有许多不同边界框的导入,并希望编写脚本来编写数据库中数据的加载。

目前,我使用:

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用户输入密码。 有没有办法在同一行命令中发送密码? (也许这需要新增职位?如果有人指出我正确的方向,我会很高兴)**

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

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

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

在进一步研究的帮助下和@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>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM