Python 3.6试图使用来自另一个程序的命令

时间:2017-08-10 19:18:52

标签: python python-3.6

我的部分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代码运行。

2 个答案:

答案 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])