在Python中调用VBScript时,如何将Python Dictionary作为参数传递?

时间:2014-08-21 13:38:06

标签: python dictionary vbscript arguments

假设我们有一些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对象,我该怎么做?

1 个答案:

答案 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。