python - 通过 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()
解决方案
最终得到了解决方案,我会把它贴在这里,以防其他人遇到这个问题:
安装在托管 Web 应用程序的服务器上的 opencv 的 dll 文件具有不同的访问权限。从 Web 应用程序调用文件时,这些文件被拒绝访问,而调用的其余模块没有问题。
我使用sysinternals 进程监视器来跟踪哪些文件被拒绝访问,并且能够手动更改权限。不是很优雅,但它成功了。
推荐阅读
- mysql - 获取列中具有重复项的行的 ID
- django - 我的演示 django 项目在重新启动命令提示符后没有启动服务器
- reactjs - Axios 在 React 中的 render() 方法中导致未定义
- php - 如何使用codeigniter在两个表中插入表单数据,包括具有相同ID的多行表
- flutter - 如何实现属性向右滑动和向左滑动
- javascript - onClick 将属性添加到 jsx
- r - 我如何知道 R 中数据集的分布?
- angular - 动态注入组件与通过 *ngIf 控制它
- node.js - 将时间切片音频附加到发送到 dialogflow.streamingDetectIntent() 的流中
- c++ - 模板函数图