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

时间:2011-07-18 11:58:15

标签: python vbscript

我在使用某些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 :(得分:2)

首先,你的Python脚本看起来很可疑,我怀疑反斜杠在一个简单的字符串中工作。至少,在我的测试中,它没有用,我只是用正斜杠替换它们。

接下来,您可以通过在cmd /k前面添加cmd来查看错误消息,运行窗口仍保留在屏幕上。您可以看到找不到.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可以更好地运行这样的脚本。

答案 1 :(得分:0)

尝试

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

而不是你的第一行。