如何运行涉及Python 64位的32位应用程序的子进程命令

时间:2016-03-14 19:38:21

标签: python windows odbc subprocess

对于如何使用Python 3.4 64位(Windows 7 64位)中的子进程运行32位应用程序,我一直在摸不着头脑。

应用程序(" C:\ Program Files(x86)\ GDAL \ ogr2ogr.exe")从终端(cmd.exe)正确运行。但是,我无法使用子进程运行它并给出错误,我怀疑这是因为我尝试读取的源是使用MS Access 32位ODBC驱动程序的用户DSN。

我尝试了几次子进程调用的调用(例如shell=Trueshell=Falseexecutable="C:\Program Files (x86)\GDAL\ogr2ogr.exe"等等。

这是第一个,它引发PermissionError例外:

query = subprocess.check_call(command,
    universal_newlines=True,
    env={"PGCLIENTENCODING": "WIN1252"},
    shell=False)

另一个使用shell=True的调用会提供更多信息性错误消息:

query = subprocess.call(" ".join(command),
                universal_newlines=True,
                env={"PGCLIENTENCODING": "WIN1252"},
                shell=True)

ERROR 1: Unable to initialize ODBC connection to DSN for PET4,
[Microsoft][ODBC Microsoft Access Driver] The Microsoft Access database engine cannot open or write to the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view and write its data.
FAILURE:
Unable to open datasource `ODBC:FILE4' with the following drivers.
  -> ESRI Shapefile
  -> MapInfo File
  -> UK .NTF
  -> SDTS
  -> TIGER
  ...
  <skipped drivers>
  ...
  -> Walk
  -> CartoDB
  -> SXF
Error running 'ogr2ogr.exe' :

 Command '"C:/Program Files (x86)/GDAL/ogr2ogr.exe" --config PG_USE_COPY YES -overwrite -s_srs EPSG:4326 -t_srs EPSG:3175 -f PostgreSQL "PG:dbname=testdb_postgis_21 user=postgres host=localhost" ODBC:FILE4 -nln public.file4 -lco GEOMETRY_NAME=geom -lco FID=gid -lco SPATIAL_INDEX=ON PLOTS' returned non-zero exit status 1

如果我直接在终端中执行,那么在错误消息末尾的Command之后的同一个调用就会像魅力一样运行。

我在子进程调用中遗漏了什么?我是否忽略了我需要做的重要事情?任何帮助都感激不尽。

0 个答案:

没有答案