如何在Python中调用VBScript时传递Python字典作为参数?
假设我们有一个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.Item(some_variable)
我是不是应该把字典对象进行序列化?那我该怎么做呢?
1 个回答
3
你不能通过命令行传递对象;传递的参数必须是字符串。所以你需要用字符串的方式来调用 .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。