通过 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 来追踪哪些文件被拒绝访问并且能够手动更改权限。不是很优雅,但它成功了。
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 来追踪哪些文件被拒绝访问并且能够手动更改权限。不是很优雅,但它成功了。