首页 > 解决方案 > 通过 VB 运行 Python 脚本时遇到问题

问题描述

目标是接收图像路径并将其作为参数传递给 Python 程序,然后接收结果。

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

更令人困惑的是,cv2当直接从 cmd 执行时,脚本与导入的模块完美运行。只有当 VB 代码运行包含该行的脚本时,它才会起作用import cv2

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

以图像路径为参数运行 Python 脚本的 VB 代码:

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()

标签: pythonvb.netopencvweb-applicationscv2

解决方案


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

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

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


推荐阅读