在VBS中使用WshShell.Run运行Python脚本不生成输出文件

2 投票
2 回答
18337 浏览
提问于 2025-04-16 21:45

我遇到了一个VB脚本的问题——看起来应该不难解决,但我在谷歌上翻了很多页面,还是没找到解决办法。

[问题]

这是我的Python文件(test.py),我简化了内容,只展示问题:

f = open("testing.txt", 'w')
f.write("oh hai\n")
f.close()

当然,当我直接从命令行运行这个文件时,它会生成预期的文件。

但是,当我在一个简单的.vbs脚本中运行时(警告:我的vbs技能不太行。这可能就是我遇到问题的原因。到目前为止,我没有遇到太多问题,只是因为在XP上编码而感到痛苦,因为我习惯用vim)

Set WshShell = WScript.CreateObject("WScript.Shell")
cmd = "C:\Python27\python test.py"
WshShell.Run cmd

根本没有生成输出文件!一点都没有!这让我很生气,因为当我在开始菜单的运行程序中输入那个确切的命令("C:\Python27\python test.py")时,它是可以工作的!

[系统信息]

我在工作,所以用的是Windows XP。其他的配置都很标准,或者我认为是这样。

编辑:把"C:\Python27\testing.py"改成了"testing.py"。这是我在尝试解决问题时留下的,想着可能是把文件放在了目标文件夹之外。

2 个回答

0

试试

f = open("C:\\Python27\\testing.txt", 'w')

来代替你第一行的代码。

3

首先,你的Python脚本看起来有点问题,我怀疑反斜杠在简单字符串中是不能用的。至少在我的测试中,它是不能用的,我只是把它们换成了正斜杠。

接下来,你可以通过在命令前加上 cmd /k 来查看错误信息,这样运行窗口会一直显示在屏幕上。你会看到找不到.py文件,因为它不在当前目录里。你需要指定这个文件的绝对路径,可能需要从脚本中获取当前路径。

[编辑] 我终于得到了一个可以工作的代码(我的VBS有点生疏了...)

Dim wshShell, fso, loc, cmd

Set fso = CreateObject("Scripting.FileSystemObject")
loc = fso.GetAbsolutePathName(".")
WScript.Echo loc

'~ cmd = "%ComSpec% /k C:\Languages\Python\python.exe " + loc + "\test.py"
cmd = "C:\Languages\Python\python.exe " + loc + "\test.py"
WScript.Echo cmd

Set wshShell = CreateObject("WScript.Shell")
wshShell.Run cmd

如果提供了路径,你也可以检查一下参数:

if WScript.Arguments.Count = 0 then
    loc = fso.GetAbsolutePathName(".")
else
    loc = WScript.Arguments(0)
end if

这样的脚本最好用cscript来运行,而不是默认的wscript。

撰写回答