将 return 值从 Python 脚本传递到 VB 脚本
Passing return value from Python script to VB script
我有一个 VB 脚本 (UFT) 代码触发 Python 脚本来检查图像是否符合要求的颜色并且 python 脚本是 return使用颜色值将字符串返回到 VB 脚本。
我能够从 VB 脚本调用 python 脚本,并且 python 脚本也被执行并 returned 值。我的问题是无法在任何变量中保存 return 值,它只是空白
下面是我的 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
下面是 python 脚本 return 对 VB 脚本的值(验证颜色)
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 是 returning 值时,问题出在我的 VB 脚本中
当我执行 Msgbox PyResult.Readall 时,我收到的正确消息是 return 从 Python 编辑的,绿色存在或绿色不存在。
如果我将该值分配给任何变量,如 pyr。 pyr 总是空的,没有任何东西被存储。
请帮助我解决将 pyResult.ReadAll 存储到变量的问题,以便我可以在其他条件下使用它。
如果需要更多信息,请告诉我。
看来ReadAll
方法也清除了StdOut
中的内容,所以只能用一次
在您的示例中,它适用于行
msgbox pyResult.ReadAll
但是在这个调用之后你的 pyResult 是空的。
再次尝试使用此方法不再有效,因此在这一行中
pyr = pyResult.ReadAll
它returns一个空字符串。
只需删除第一个调用
msgbox pyResult.ReadAll
并且只调用 ReadAll
一次将返回值存储到这样的变量中
pyr = pyResult.ReadAll
从那时起,如果您需要该值,请仅使用 pyr
,并且不再调用 ReadAll
。
我有一个 VB 脚本 (UFT) 代码触发 Python 脚本来检查图像是否符合要求的颜色并且 python 脚本是 return使用颜色值将字符串返回到 VB 脚本。 我能够从 VB 脚本调用 python 脚本,并且 python 脚本也被执行并 returned 值。我的问题是无法在任何变量中保存 return 值,它只是空白
下面是我的 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
下面是 python 脚本 return 对 VB 脚本的值(验证颜色)
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 是 returning 值时,问题出在我的 VB 脚本中 当我执行 Msgbox PyResult.Readall 时,我收到的正确消息是 return 从 Python 编辑的,绿色存在或绿色不存在。
如果我将该值分配给任何变量,如 pyr。 pyr 总是空的,没有任何东西被存储。
请帮助我解决将 pyResult.ReadAll 存储到变量的问题,以便我可以在其他条件下使用它。
如果需要更多信息,请告诉我。
看来ReadAll
方法也清除了StdOut
中的内容,所以只能用一次
在您的示例中,它适用于行
msgbox pyResult.ReadAll
但是在这个调用之后你的 pyResult 是空的。 再次尝试使用此方法不再有效,因此在这一行中
pyr = pyResult.ReadAll
它returns一个空字符串。
只需删除第一个调用
msgbox pyResult.ReadAll
并且只调用 ReadAll
一次将返回值存储到这样的变量中
pyr = pyResult.ReadAll
从那时起,如果您需要该值,请仅使用 pyr
,并且不再调用 ReadAll
。