python - 将 Python 脚本的返回值传递给 VB 脚本
问题描述
我有一个 VB 脚本 (UFT) 代码,它触发 Python 脚本来检查图像是否为所需的颜色,并且 python 脚本将字符串返回到带有颜色值的 VB 脚本。我能够从 VB 脚本调用 python 脚本,并且 python 脚本也执行并返回值。我的问题是无法将返回值保存在任何变量中,它只是空白
下面是我调用python脚本的VB脚本代码
Function Verifycolor(icolor,ipath,rValue)
Dim pyr
Set pyShell = CreateObject("Wscript.Shell")
color = icolor
Imagepath = ipath
pyColorVerify = "python ""C:\Users\a272099\Desktop\Python\codes\Verifycolor.py""" & " " & color & " " & ImagePath
Set pyOperation = pyShell.Exec(pyColorVerify)
Set pyResult = pyOperation.StdOut
wait(1)
msgbox pyResult.ReadAll
pyr = pyResult.ReadAll
msgbox pyr
'Do
'pyRet = pyResult.ReadAll
''msgbox pyReturn
'wait(1)
'Loop Until pyReturn <> empty
If pyr = rValue Then
Reporter.ReportEvent micPass,"Preconditions are not set to" &color& "color","preconditions are set"
Else
Reporter.ReportEvent micFail,"Preconditions are set to" &color& "color","preconditions are set"
End If
msgbox pyResult.ReadAll
End Function
下面是向 VB 脚本返回值的 python 脚本(验证颜色)
import sys
import numpy as np
import pytesseract
from PIL import Image
from pytesseract import image_to_string
import cv2
color = sys.argv[1]
src_path = sys.argv[2]
#src_path = "C:\\Users\\a291068\\Desktop\\Python\\PreconditionsImage.png"
img=cv2.imread(src_path)
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
if color == "RED":
mask_red = cv2.inRange(img_hsv, (0,50,20), (5,255,255))
if cv2.countNonZero(mask_red) > 0:
Return = "Red is present!"
else:
Return = "Red is not present!"
else:
if color == "GREEN":
mask_green = cv2.inRange(img_hsv, (36,25,25), (70,255,255))
if cv2.countNonZero(mask_green) > 0:
Return= "Green is present!"
else:
Return = "Green is not present!"
print(Return)
问题出在我的 VB 脚本中,当我执行 Msgbox PyResult.Readall 时 python 返回值时,我收到了从 Python 返回的正确消息,无论是绿色存在还是绿色不存在。
如果我将该值分配给任何变量,例如 pyr. pyr 总是空的,没有任何东西被存储。
请帮助我解决将 pyResult.ReadAll 存储到变量的问题,以便我可以在其他条件下使用它。
让我知道是否需要更多信息。
解决方案
看起来该ReadAll
方法还清除了 中的内容StdOut
,因此您只能使用一次。
在您的示例中,它适用于该行
msgbox pyResult.ReadAll
但是在这个电话之后,你的 pyResult 是空的。再次尝试使用此方法不再有效,因此在这一行中
pyr = pyResult.ReadAll
它返回一个空字符串。
只需删除第一个电话
msgbox pyResult.ReadAll
并且只调用ReadAll
一次将返回的值存储到这样的变量中
pyr = pyResult.ReadAll
从那时起,仅pyr
在您需要该值时才使用,并且不再调用ReadAll
。
推荐阅读
- react-native - react-native-ssl-pinning - 此服务器的证书无效
- javascript - Dreamweaver 实时预览不使用 CSS 样式表和其他参考
- docker - 连接到上游 Nginx Docker 时连接被拒绝
- javascript - 如何使用 express 显示来自多个不同目录的网页
- ocr - tesseract OCR 无法识别这些数字
- c++ - 当您计算序列中的最大值时,将最大数作为输入的目的是什么?
- javascript - 填写表格后如何获得感谢?
- reactjs - 即使传入了正确的道具,简单的 React 测试也会失败
- html - 如何解决 div 对齐问题?
- c++ - 使用#define 有条件地定义宏