假设我们有一些python字典,我们有一个VBScript。我们将在python中调用脚本并将字典作为参数传递,如下所示:
import subprocess
dict = {}
dict ["x61"] = "P11"
dict ["x62"] = "P22"
dict ["x63"] = "P33"
subprocess.call(['cscript.exe', 'H:\\public\\vbscript.vbs', dict])
在VBScript中,我试图像这样分配字典:
Dim dict
dict = WScript.Arguments(0)
我在终端中获得的(错误)输出是:
required: 'x61x63x62'
可能是因为我正在循环并尝试访问dict中的所有项目:
dict.Item(some_variable)
我应该序列化dict对象,我该怎么做?
答案 0 :(得分:2)
您不能通过命令行传递对象;参数需要是字符串。因此,使用dict的字符串表示形式调用.vbs,并解析.vbs中的参数。为了帮助您入门:
的.py:
import subprocess
dict = {}
dict ["x61"] = "P11"
dict ["x62"] = "P22"
dict ["x63"] = "P33"
sdict = str(dict)
subprocess.call(['cscript.exe', '../vbs/25427813.vbs', sdict])
.VBS:
Option Explicit
Function dict(s)
WScript.Echo "***", s
Dim tmp
Set tmp = CreateObject("Scripting.Dictionary")
Dim r : Set r = New RegExp
r.Global = True
r.Pattern = "'([^']+)': '?([^']+)'?"
Dim m
For Each m In r.Execute(s)
tmp(m.SubMatches(0)) = m.SubMatches(1)
Next
Set dict = tmp
End Function
WScript.Echo dict(WScript.Arguments(0))("x62")
输出:
python 25427813.py
*** {'x61': 'P11', 'x63': 'P33', 'x62': 'P22'}
P22
您可以使用已建立的格式代替“滚动自己”,例如JSON。