通过 VB 给 Python 脚本带来麻烦 运行

Trouble running a Python script through VB

objective是接收图片路径,作为参数传给Python程序,然后接收结果。

这是通过使用 VB 的 Web 应用程序(在 IIS 服务器上)完成的,它完美地工作 除了 当我导入 python 模块 OpenCV (在 Python 中导入为 cv2,更具体地说)。

更令人困惑的是,脚本 运行 在直接从 cmd 执行时与导入的 cv2 模块完美匹配。它仅在 VB 代码 运行 包含行 import cv2.

的脚本时才起作用

为清楚起见,我将在下面显示一些代码。

VB 代码 运行ning Python 脚本,图像路径作为参数:

Dim Processtask As New System.Diagnostics.Process()
Processtask.StartInfo.FileName = "cmd.exe"
Processtask.StartInfo.Arguments = "/c python " + path.ToString + " " + ImageURL.ToString
Processtask.StartInfo.UseShellExecute = False
Processtask.StartInfo.RedirectStandardOutput = True
Processtask.StartInfo.RedirectStandardError = True
Processtask.StartInfo.CreateNoWindow = True
Processtask.Start()
Processtask.WaitForExit()
output = Processtask.StandardOutput.ReadToEnd()

Python代码段接收图片路径:

import sys
import cv2
if __name__ == "__main__":
    im = str(sys.argv[1])
print(im)

关于导致此问题的原因,我想不出 运行 个可能的想法。任何建议将不胜感激。

编辑

我设法找到了完整的错误消息,内容如下:

System.Exception: System.IO.StreamReader
System.InvalidOperationException: Process has exited, so the requested 
information is not available. 
at System.Diagnostics.Process.EnsureState(State state) at 
System.Diagnostics.Process.get_ProcessName() 
at System.Diagnostics.Process.ToString()

最终找到了解决方案,我会post在这里以防其他人遇到这个问题:

安装在托管网络应用程序的服务器上的 opencv 的 dll 文件具有不同的访问权限。从 Web 应用程序调用时文件被拒绝访问,而调用的其余模块没有问题。

我使用 sysinternals process monitor 来追踪哪些文件被拒绝访问并且能够手动更改权限。不是很优雅,但它成功了。