如何在Python中调用VBScript时传递Python字典作为参数?

0 投票
1 回答
3020 浏览
提问于 2025-04-18 18:04

假设我们有一个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。

撰写回答