我有一个命令,它使用Python的子进程模块中的Popen来调用postgis的raster 2 pgsql命令。这是我得到的:
curl_url = "https://....."
command = """raster2pgsql -F -I -C -s 26916 -t auto -R "/vsicurl/{}" table_name | database credentials...""".format(curl_url)
p1 = subprocess.Popen(command, shell=False, stdin=PIPE, stdout=PIPE, stderr=PIPE)
out, err = p1.communicate(b'...(This part is supposed to be the password for my database)', timeout=20)
print("out: {}, err: {}".format(out.decode('utf-8'), err))
我一直得到的错误是
out: , err: b'ERROR: Unable to read raster file: table_name\r\n'
这表明Popen完全跳过了我的“/vsicurl/url....”块,并试图打开我的table_name作为光栅文件。
当我对光栅curl_url进行更改时(例如to /url...或者只是/vsicurl/,这两个语法显然是不正确的),错误返回到正常状态并说
out: , err: b'ERROR: Unable to read raster file: /url...'
有人知道为什么会发生这种情况以及如何解决它吗?
1条答案
按热度按时间wz1wpwve1#
你的
curl_url
实际上是一个文件URI而不是一个存储桶URL吗?同样的命令在shell中也能用吗?