You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C#调用ArcGIS Pro的propy.bat执行Python脚本中的Main函数并解决执行无输出问题

如何通过C#调用ArcGIS Pro的propy.bat执行Python脚本中的Main函数并解决执行无输出问题

嘿,我看了你的问题,现在的情况是调用propy.bat后没日志、没输出,但返回码是0,这说明进程没报错,但核心逻辑根本没跑起来。咱们一步步来解决:

第一步:先把Python脚本的坑填上

你写的test.py里只定义了Main函数,但从来没调用它啊!就像你写了个方法但没执行,脚本跑完自然啥也不会做。另外,写日志的时候没关闭文件,可能导致内容没刷到磁盘。我帮你改了下脚本:

import arcpy
import string, sys, os
import ctypes

logfile = "C:\\Temp\\StartPython\\Logfile.log"

def Main(dataset):
    print("Started with argument " + dataset)
    # 用with语句自动关闭文件,避免资源泄漏
    with open(logfile,'a') as datei:
        # 加个换行符,不然日志内容会堆在一起
        datei.write("Started with argument " + dataset + "\n")

# 关键:新增这段,从命令行接收参数并调用Main
if __name__ == "__main__":
    if len(sys.argv) > 1:
        Main(sys.argv[1])
    else:
        print("Error: No dataset argument provided")
        with open(logfile,'a') as datei:
            datei.write("Error: No dataset argument provided\n")

第二步:修正C#里的工作目录和参数传递

你的C#代码把工作目录设成了ArcGIS\Pro\bin,但propy.bat是在Scripts目录下,它的逻辑依赖相对路径找PythonEnvUtils.exe,工作目录不对的话,批处理可能找不到依赖文件。另外参数里的引号转义有点多余,用C#的@字符串更清爽:

var executable = @"C:\Program Files\ArcGIS\Pro\bin\Python\Scripts\propy.bat";
// 把工作目录改成propy.bat所在的Scripts目录
var workingDir = @"C:\Program Files\ArcGIS\Pro\bin\Python\Scripts";
// 路径没有空格的话,直接传就行,不用额外加引号
var myArguments = @"C:\Temp\StartPython\test.py C:\somePath";

var process = new RunProcess();
var processOutcome = process.RunProcessGrabOutput(executable, myArguments, workingDir);

第三步:优化Process的配置细节

你现在的Process代码大部分没问题,但有个小细节可以调整:PYTHONUNBUFFERED环境变量有些Python环境对大小写敏感,改成"1"比"TRUE"更稳妥:

在RunProcessGrabOutput方法里,把环境变量那行改成:

_process.StartInfo.EnvironmentVariables.Add("PYTHONUNBUFFERED", "1");

第四步:先手动测试排除环境问题

在写代码之前,先手动跑一遍批处理确认没问题:

  1. 打开命令提示符,切换到C:\Program Files\ArcGIS\Pro\bin\Python\Scripts
  2. 执行命令:
propy.bat C:\Temp\StartPython\test.py C:\somePath

看看有没有生成日志文件,命令行有没有输出。如果这一步都没效果,那问题出在ArcGIS Pro的Python环境配置,不是C#代码的问题。

额外调试技巧

如果还是没输出,可以试试这些方法排查:

  • 在propy.bat开头加一句echo Propy.bat started,看C#能不能捕获到这个输出,确认批处理是否真的被执行了。
  • 在Python脚本最开头加print("Test script loaded successfully"),确认脚本被正确加载。
  • 检查C:\Temp\StartPython目录的权限,确保你的C#程序有写入权限,避免因为权限问题写不了日志。

备注:内容来源于stack exchange,提问作者Gener4tor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:58:14