将Python脚本的返回值传递给VB脚本

2024-09-22 20:26:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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脚本(Verify color)

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) 

当python返回值时,问题出在我的VB脚本中 当我使用Msgbox时PyResult.全部读取我得到了从Python返回的正确消息,要么是Green存在,要么是Green不存在。你知道吗

如果我把这个值赋给任何变量,比如pyr。pyr总是空的,没有存储任何东西。你知道吗

请帮我解决这个存储问题pyResult.ReadAll文件一个变量,以便我可以在其他条件下使用它。你知道吗

如果需要进一步的信息,请告诉我。你知道吗


Tags: import脚本imgreturnifmaskcv2are
1条回答
网友
1楼 · 发布于 2024-09-22 20:26:57

看起来ReadAll方法也会清除StdOut中的内容,因此只能使用一次。你知道吗

在您的示例中,它适用于

msgbox pyResult.ReadAll

但在这通电话之后,你的pyResult是空的。 第二次尝试使用这种方法是行不通的,所以在这一行

pyr = pyResult.ReadAll

它返回一个空字符串。你知道吗

只需删除第一个呼叫

msgbox pyResult.ReadAll

只调用ReadAll一次,将返回的值存储到如下变量中

pyr = pyResult.ReadAll

从那时起,如果需要该值,只使用pyr,并且不再调用ReadAll。你知道吗

相关问题 更多 >