O lançamento do subprocesso python tem um comportamento diferente, dependendo do iniciador
Estou tentando iniciar o Python 2.5 a partir do Python 2.6. O motivo disso é que uma biblioteca compilada que estou tentando usar (GDAL) não é suportada para a versão do Python distribuída com outro programa (ArcGIS
Aqui está o que estou tentando fazer. Omain.py
arquivo no Python 2.6:
import subprocess
p = subprocess.Popen(['C:\OSGeo4W\gdal_python_exec.bat', 'X:\\local\\import_tests.py'])
gdal_python_exec.bat
é um script em lote do Windows que dispara a versão 2.5 do Python que eu quero, além de configurar algumas variáveis de ambiente:
@echo off
set OSGEO4W_ROOT=C:\OSGeo4W
PATH=%OSGEO4W_ROOT%\bin;%PATH%
for %%f in (%OSGEO4W_ROOT%\etc\ini\*.bat) do call %%f
@echo on
@C:\OSGeo4W\bin\python.exe %1
import_tests.py
tenta importar gdal:
try:
from osgeo import gdal
raw_input('Imported! (Press enter)')
except Exception, e:
print(e)
raw_input('Failed! (Press enter)')
Quando corromain.py
em uma linha de comando do DOS comopython.exe main.py
(essa é a versão 2.6 do python do Arc), as coisas funcionam bem. No entanto, se eu pegar o mesmo script e adicioná-lo como uma 'caixa de ferramentas' dentro do aplicativo principal e iniciá-lo a partir daí, recebo uma "DLL não encontrada" para a lib GDAL dentro doimport_tests.py
Arquivo
Como isso pode acontecer quandosubprocess
é o módulo que está lançando um interpretador Python diferente? Alguma idéia do que poderia estar acontecendo?
Edita: Posso verificar se oos.environ['PATH']
ariáveis são iguais em ambas as chamada
Edit2: OC:\Program Files\ArcGIS...\Bin
diretório @ continha uma dll que não era compatível com minhas ligações python. O Windows pesquisou primeiro o cwd e tentou carregar essa dll, falhou e relatou o erro "dll não encontrado".