C#中的arcpy方式怎么利用python.exe实现-创新互联
C#中的arcpy方式怎么利用python.exe实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

背景
环境:ArcGis10.2.2。C#开发程序一直以来以调用Desktop的python环境(32位)来做数据处理分析。但是数据量大时,出现了内存资源不够的情况。因此决定换成使用64位python环境。
遇到问题
C#通过Process.Start()去调用64位python.exe,在Debug模式下毫无问题,但是直接运行exe就报错Process finished with exit code -1073741819 (0xC0000005)。指向异常。
分析问题
后来发现是由于arcpy模块导致的,去掉这个模块的内容就能运行,import arcpy就运行不起来。既然使用arcpy做数据处理,如果连import arcpy都不行,那还做个屁啊。于是开始寻找程序Debug模式下和Run模式下的区别。
程序中使用ProcessStartInfo类启动的python.exe的进程,那问题基本就出自这里了。附上检测代码:
var start = new ProcessStartInfo
{
WorkingDirectory = Environment.CurrentDirectory,
FileName = sInterpreterPath,
UseShellExecute = false,
ErrorDialog = true,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardInput = true,
Arguments = sParam
};
using (Process process = Process.Start(start))
{
var a = start.Environment;
var b = a.Keys.ToList();
b.Sort();
var sss = "";
foreach (var it in b)
{
sss = $"{sss}\n{it}------->{a[it]}";
}
sss = sss.Trim();
using (StreamReader reader = process.StandardOutput)
{
var sResult = "";
while (!reader.EndOfStream)
{
sResult = $"{sResult} \n {reader.ReadLine()}";
}
sResult = sResult.Trim();
MessageBox.Show(sResult);
}
MessageBox.Show("ExitCode is " + process.ExitCode);
} 当前标题:C#中的arcpy方式怎么利用python.exe实现-创新互联
当前URL:http://www.jxjierui.cn/article/dhepjo.html


咨询
建站咨询
