将返回值从Python脚本传递到VB脚本

我有一个VB脚本(UFT)代码,该代码会触发Python脚本以仅检查图像是否为所需颜色,而python脚本会将字符串返回给具有颜色值的VB脚本。 我能够从VB脚本调用python脚本,并且python脚本也已执行并返回了值。我的问题是无法将返回值保存在只是空白的任何变量中

下面是我的VB脚本代码,它调用python脚本

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))
        if cv2.countNonZero(mask_green) > 0:
            Return= "Green is present!"
        else:
            Return = "Green is not present!"
print(Return) 

当python返回值时,问题在我的VB脚本中 当我执行Msgbox PyResult.Readall时,正在获取从Python返回的正确消息,即存在绿色或不存在绿色。

如果我将该值分配给任何变量,例如pyr。 pyr总是空的,什么也没有存储。

请帮助我解决将pyResult.ReadAll存储到变量中的问题,以便我可以在其他条件下使用它。

让我知道是否需要进一步的信息。

lokeven 回答:将返回值从Python脚本传递到VB脚本

看起来ReadAll方法也清除了StdOut中的内容,因此您只能使用一次。

在您的示例中,它适用于该行

msgbox pyResult.ReadAll

但是在此调用之后,您的pyResult为空。 尝试再次使用此方法不再起作用,因此在此行

pyr = pyResult.ReadAll

它返回一个空字符串。

只需删除第一个电话

msgbox pyResult.ReadAll

,仅调用ReadAll一次,即可将返回值存储到这样的变量中

pyr = pyResult.ReadAll

从那时起,仅在需要该值时才使用pyr,并且不再调用ReadAll

本文链接:https://www.f2er.com/3112262.html

大家都在问