我的部分python程序使用subprocess打开vbs脚本。
path = os.sep.join(['C:','Users',getpass.getuser(),'Desktop','Program','build','exe.win32-3.6','vbs.vbs'])
subprocess.call([sys.executable, path])
但是不是执行我的vbs脚本而是尝试将其作为python代码运行并给我:NameError:msgbox未定义。 当我手动运行vbs脚本时,它可以工作。
我希望python正常执行vbs脚本。不要将它作为python代码运行。
答案 0 :(得分:0)
这正是你告诉子进程要做的。来自docs
<强> sys.executable 强>
一个字符串,给出Python解释器的可执行二进制文件的绝对路径,在有意义的系统上。如果Python是 无法检索其可执行文件的真实路径
sys.executable
将是一个空字符串或None
。
答案 1 :(得分:0)
sys.executable
指向系统的Python可执行文件。在您的情况下,可能类似于C:\Python27\python.exe
。你应该把它打印出去看看。
要执行VBScripts,您需要使用C:\Windows\system32\wscript.exe
。
此外,使用os.path.join()
比os.sep.join()
更适合任务。
所以你最终得到了:
system32 = os.path.join(os.environ['SystemRoot'], 'system32')
wscript = os.path.join(system32, 'wscript.exe')
path = os.sep.join(['C:','Users',getpass.getuser(),'Desktop','Program','build','exe.win32-3.6','vbs.vbs'])
subprocess.call([wscript, path])