使用WshShell运行Python脚本。在VBS中运行不会生成输出fi

2024-05-15 17:35:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些VB脚本的问题-它似乎不应该很难解决,但即使在谷歌的许多页面上艰难跋涉,我还没有找到解决方案。

[问题]

这是我的python文件(test.py),简化为只显示问题:

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

当然,当直接从命令行运行时,这会像您所期望的那样生成文件。

但是,在简单的.vbs脚本中运行时(警告:我的vbs技能不足。这可能就是我有问题的原因。到目前为止,我还没有遇到很多问题,除了讨厌在我习惯使用vim的时候使用XP来编写代码之外)

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

没有生成输出文件!完全!当我从“开始”菜单将确切的命令("C:\Python27\python test.py")输入run程序时,它就开始工作了,这让我很恼火!

[系统信息]

在工作中,他们使用的是Windows XP。其他的一切都很标准,或者说让我相信。

编辑:将“C:\ Python27\testing.py”改为“testing.py”。这是我试图解决问题时留下的,我想可能是把文件放在目标文件夹之外的某个地方。


Tags: 文件pytest脚本cmd页面open解决方案
2条回答

试试看

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

而不是你的第一行。

首先,您的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。

相关问题 更多 >