根据启动器的不同,启动python子流程具有不同的行为

根据启动器的不同,启动python子流程具有不同的行为,python,subprocess,arcgis,gdal,Python,Subprocess,Arcgis,Gdal,我正在尝试从Python2.6启动Python2.5。这是因为我尝试使用的编译库(GDAL)不支持与另一个程序(ArcGIS)一起分发的Python版本 以下是我试图做的。Python 2.6中的main.py文件: import subprocess p = subprocess.Popen(['C:\OSGeo4W\gdal_python_exec.bat', 'X:\\local\\import_tests.py']) gdal\u python\u exec.bat是一个windows

我正在尝试从Python2.6启动Python2.5。这是因为我尝试使用的编译库(GDAL)不支持与另一个程序(ArcGIS)一起分发的Python版本

以下是我试图做的。Python 2.6中的
main.py
文件:

import subprocess
p = subprocess.Popen(['C:\OSGeo4W\gdal_python_exec.bat', 'X:\\local\\import_tests.py'])
gdal\u python\u exec.bat
是一个windows批处理脚本,可以启动我想要的python 2.5版本,同时还可以设置一些环境变量:

@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\u tests.py
尝试导入gdal:

try:
    from osgeo import gdal
    raw_input('Imported! (Press enter)')
except Exception, e:
    print(e)
    raw_input('Failed! (Press enter)')
当我在DOS命令行中以python.exe main.py的形式运行
main.py
(这是Arc的python 2.6版本)时,一切正常。但是,如果我使用相同的脚本并将其作为“工具箱”添加到主应用程序中,然后从那里启动它,则会在
import\u tests.py
文件中为GDAL库获取一个“未找到DLL”

当启动不同Python解释器的模块是
subprocess
时,怎么会发生这种情况?对可能发生的事情有什么想法吗

Edit:我可以验证两个调用中的
os.environ['PATH']
变量是否相同


Edit2:目录
C:\Program Files\ArcGIS…\Bin
包含一个与python绑定不兼容的dll。Windows首先搜索cwd并尝试加载该dll,但失败,然后报告“未找到dll”错误。

无论路径是否正确,一个简单的测试将是更改到不同的任意目录并执行
python.exe C:\full\PATH\to\main.py
。如果这再现了问题,那么你知道这是某种路径问题


我敢打赌,这就是区别所在。如果是这种情况,您可能需要改变从
Python.exe
访问Python代码和库的方式,可以使用或使用其他类似/,以生成具有正确sys.path的控制台脚本。

从其他地方发布的注释中可以看出:

“工作的是C:\Windows,坏的是C:\Program Files\ArcGIS…\Bin。”

执行
os.chdir
以使其正常工作


[不知道这到底意味着什么,注释很难解析。]

谢谢您的帮助,但是除了一个额外的目录外,sys.path在两个调用之间是相同的。如果手动删除该目录,仍然会出现相同的错误。我也尝试过按您建议的绝对路径调用脚本,但仍然没有。你还有什么想法我可以查一下吗?是的,这就是问题所在。显然,从GUI运行时,cwd位于具有相同dll的不同版本的目录中。当我从那个目录切换到其他任何地方时,一切都会恢复正常。您在主应用程序中使用的GUI是什么?gdal尝试加载哪些DLL?其中有没有加载成功?主要GUI是ArcGIS。据我所知,
gdal
试图加载
gdal.dll
,但我不确定如何找到答案。如何检查?您可以使用查看特定进程加载了哪些DLL。在本例中,您可能需要检查ArcGIS和所有Python进程。考虑到您最初的问题,我想说ArcGIS很可能是在毒害什么东西,而不是python。C:\Program Files\ArcGIS…\Bin目录包含一个与我的python绑定不兼容的dll(我不确定为什么,windows不是我的东西)。Windows首先搜索cwd并尝试加载该dll,但失败,然后报告“未找到dll”错误。@Rich:此类信息不属于注释。这是问题的关键部分。请更新问题以包括这一基本事实。