当我在bash上执行这个python脚本时,这就是我收到的,这一切都很好。
ans=$(python getIndividualCurrentPrice.py 1113 0001 0293 0004 1972 0005 0003 0941)
echo $ans
[u'68.00', u'110.90', u'18.60', u'51.80', u'25.50', u'73.15', u'15.88', u'110.10']
然而,当我尝试通过 VBA执行这个python脚本时,这就是我在VBA中所做的:
RetVal = Shell("C:\Python27\python.exe C:\Python27\getIndividualCurrentPrice.py 1113 0001 0293 0004 1972 0005 0003 0941" )
MsgBox(RetVal)
10980
更新
我设法在VBA中执行python脚本而没有任何错误,但是返回的值是 10980
一个随机数,这没有意义。有趣的是,我可以看到启动了一个python.exe,并在那里显示了正确的结果。但返回的结果从未存储在VBA变量RetVal
中。 **这里出了什么问题? **
旁注:我尝试了MsgBox(Shell("echo $HOME"))
,但我得到了一个值26988
,根本没有意义。我该如何解决这个问题?
答案 0 :(得分:1)
我认为Shell()返回类似进程ID的东西 - 而不是标准输出。
我不确定如何在纯VBA中执行此操作。如果您使用的是Windows计算机,则可以使用VBScript的Windows脚本宿主。只需确保在VBA项目中包含对Windows脚本宿主对象模型的引用(如果您还没有完成此类操作,请在VBE中的工具菜单项下)。以下代码说明了如何将标准输出的输出捕获到字符串变量。我写了一个简单的.py脚本文件来计算阶乘。然后:
Sub Test()
Dim ws As New WshShell
Dim exec As WshExec
Dim output As String
Set exec = ws.exec("python C:/programs/factorial.py 10")
output = exec.StdOut.ReadAll
MsgBox output 'prints 3628800
End Sub