python2.7、PgAdmin III和BASH 4.3.48:在BASH scrip中运行py脚本时出错,提供程序无效

2024-09-24 10:26:13 发布

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

这是我的bash脚本

# Binarize raster for later polygon creation

path=/home/rose/Desktop/test/DSM_BM24_2017_1000_4735.tif
pathdir=$(echo $path | cut -d "/" -f 1,2,3,4,5)

gdal_calc.py -A $path --outfile=$pathdir/binary.tif --NoDataValue=-9999 --calc "1 * (A != -9999)"

# Polygonize raster

binary=$pathdir/binary.tif
b=$(basename $binary)
basebinary=$(echo $b | cut -d "." -f 1)

gdal_polygonize.py $binary $pathdir/polygon$basebinary.shp polygon$basebinary

# Make EPSG:2193 projection file for polygon

ogr2ogr -a_srs EPSG:2193 -f "ESRI Shapefile" /home/rose/Desktop/test/finalpolygonbinary.shp /home/rose/Desktop/test/polygonbinary.shp

# Define variable to import to py and postgis script 'pypostgis'

polygon='$pathdir/finalpolygon$basebinary.shp'

# Call python script

python pypostgis.py $polygon

这是在bash脚本中调用的python脚本,它获取多边形shapefile并将其导入PgAdmin III中的表中

import psycopg2
import qgis.utils
import os 
import sys
from qgis.core import *
from qgis.core import QgsVectorLayer, QgsVectorLayerImport
from qgis.core import QgsDataSourceURI, QgsVectorLayer

# import layer into database shp2pgs function

def shp2pgs(layer):
    conn = psycopg2.connect("dbname='rosespace' host='localhost' port = '5432' user='rose' password='postgres' ")
    cursor = conn.cursor()
    uri = "dbname='rosespace' host='localhost' port=5432 user='rose' password='postgres' table=\"public\".\"%s\" (geom) sql=" %layer.name().lower()
    importvector = QgsVectorLayerImport.importLayer(layer, uri, "postgres", layer.crs(), False, False)
    print importvector

# Import and use $polygon variable from bash script for layer, which will eventually be called by the function above 

shapefile = sys.argv[1]
print shapefile

basename_shp = (os.path.splitext(os.path.basename(shapefile))[0]).lower()
layer = QgsVectorLayer(shapefile, basename_shp, 'ogr')

#Call function with shapefile variable - layer, originally from above bash script

shp2pgs(layer)

当我运行bash脚本时,这是print importvector的输出

print importvector
(9, u'Unable to load postgres provider')

你们中有谁知道这个错误指向什么/意味着什么,以及是否有解决方法

我猜这与我从bash-sys.argv[1]导入的变量有关,但我已经检查了它,它是一个字符串类型。我也在变量周围加了引号,但仍然不起作用

我还检查了用普通字符串文件路径替换sys.argv[1]的python脚本,它在QGIS 2.18的python控制台中运行得非常好


Tags: pathfrompyimport脚本bashlayershapefile