簡體   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