C #에서 ArcMap 추가 기능을 사용하고 있습니다. C # 코드에서 일부 Python 스크립트를 실행했습니다. 이제 해당 스크립트를 실행하기 위해 파이썬 코드를 하드 코딩했습니다. 그러나 이것은 이식성이 없습니다. 그래서 코드에서 Python 실행 파일의 경로를 가져 와서 사용하고 싶습니다.
질문:
C # 코드에서 ArcMap이 사용하는 Python 실행 파일의 경로를 어떻게 얻을 수 있습니까?
편집하다 :
당신의 제안에서, 지금은 "경로 환경"을 사용하여 파이썬 경로를 얻습니다.
//get python path from environtment variable
string GetPythonPath()
{
IDictionary environmentVariables = Environment.GetEnvironmentVariables();
string pathVariable = environmentVariables["Path"] as string;
if (pathVariable != null)
{
string[] allPaths = pathVariable.Split(';');
foreach (var path in allPaths)
{
string pythonPathFromEnv = path + "\\python.exe";
if (File.Exists(pythonPathFromEnv))
return pythonPathFromEnv;
}
}
}
그러나 문제가 있습니다.
내 컴퓨터에 다른 버전의 python이 설치되어 있으면 사용중인 "python.exe", ArcGIS도이를 사용한다는 보장이 없습니다.
"python.exe" 경로 를 얻기 위해 다른 도구를 사용해 주셔서 감사 합니다. 따라서 레지스트리 키에서 경로를 얻을 수있는 방법이 있는지 정말로 생각합니다. 들어 "ArcGIS10.0" 레지스트리 외모와 같은 :
이를 위해 다음과 같은 방법으로 경로를 생각하고 있습니다.
//get python path from registry key
string GetPythonPath()
{
const string regKey = "Python";
string pythonPath = null;
try
{
RegistryKey registryKey = Registry.LocalMachine;
RegistryKey subKey = registryKey.OpenSubKey("SOFTWARE");
if (subKey == null)
return null;
RegistryKey esriKey = subKey.OpenSubKey("ESRI");
if (esriKey == null)
return null;
string[] subkeyNames = esriKey.GetSubKeyNames();//get all keys under "ESRI" key
int index = -1;
/*"Python" key contains arcgis version no in its name. So, the key name may be
varied version to version. For ArcGIS10.0, key name is: "Python10.0". So, from
here I can get ArcGIS version also*/
for (int i = 0; i < subkeyNames.Length; i++)
{
if (subkeyNames[i].Contains("Python"))
{
index = i;
break;
}
}
if(index < 0)
return null;
RegistryKey pythonKey = esriKey.OpenSubKey(subkeyNames[index]);
string arcgisVersion = subkeyNames[index].Remove(0, 6); //remove "python" and get the version
var pythonValue = pythonKey.GetValue("Python") as string;
if (pythonValue != "True")//I guessed the true value for python says python is installed with ArcGIS.
return;
var pythonDirectory = pythonKey.GetValue("PythonDir") as string;
if (pythonDirectory != null && Directory.Exists(pythonDirectory))
{
string pythonPathFromReg = pythonDirectory + "ArcGIS" + arcgisVersion + "\\python.exe";
if (File.Exists(pythonPathFromReg))
pythonPath = pythonPathFromReg;
}
}
catch (Exception e)
{
MessageBox.Show(e + "\r\nReading registry " + regKey.ToUpper());
pythonPath = null;
}
return pythonPath ;
}
그러나 두 번째 절차를 사용하기 전에 내 추측에 대해 확신해야합니다. 손님은 다음과 같습니다.
- 파이썬과 관련된 "참"은 파이썬이 ArcGIS와 함께 설치됨을 의미합니다
- ArcGIS 10.0과 상위 버전의 레지스트리 키는 동일한 프로세스로 작성됩니다.
내 추측에 대한 설명을 얻을 수 있도록 도와주세요.