os.startfile(r"C:\Users\FZV3H2\Desktop\a.vbs")
print("hello")
**我希望执行控件在执行" a.vbs"后立即打印(" hello")开始,而不是等待" a.vbs"在下一行之前终止。 **
答案 0 :(得分:0)
尝试
os.system(r"start C:\Users\FZV3H2\Desktop\a.vbs")
这会等待程序完成加载,但是当我使用它来启动excel文件时,即使excel文件仍然打开,程序也会继续执行。
或者,使用subprocess
from subprocess import Popen
Popen( [ "foo.exe", "arg1", "arg2", "arg3" )
答案 1 :(得分:0)
您应该使用subprocess库。 Popen不会等待返回代码。
from subprocess import Popen,PIPE
proc = Popen([r"C:\Users\FZV3H2\Desktop\a.vbs"])
如果要获取调用命令的结果,可以将输出重定向到stdout。
proc = Popen([r"C:\Users\FZV3H2\Desktop\a.vbs"],stdout=PIPE, stderr=PIPE)
然后使用proc.communicate()
进行访问。 Popen将在大多数平台上工作,其中startfile是一个特定于Windows的命令。
答案 2 :(得分:0)
您需要来自python
的子进程模块的Popenfrom subprocess import Popen
Popen([r"C:\Users\FZV3H2\Desktop\a.vbs"])
如果您希望在shell环境中执行它,请将shell=True
与Popen一起使用。但是,不建议这样做
如果您的vbs文件需要设置环境和路径变量,则需要shell=True
。像这样:
from subprocess import Popen
Popen(r"C:\Users\FZV3H2\Desktop\a.vbs", shell=True)
这相当于你的startfile示例。就像双击浏览器中的文件一样。两者都类似
cmd.exe /c start C:\Users\FZV3H2\Desktop\a.vbs
但是,请尽可能避免使用shell=True
因为它可以引导您shell injection attacks。
如果您不希望使用shell=True
选项并获得WindowsError或OSError,则可以根据注册的cscript.exe或wscript.exe调用cscript.exe或wscript.exe来运行vb脚本。
In the command prompt, run these:
C:\>assoc .vbs
这将为您提供注册exe以运行vbs的名称(类似.vbs=...
)。由于您到目前为止成功使用了startfile,因此这应该会给您一些价值。现在将该值传递给`ftype命令以获取绝对可执行位置。
C:\>ftype `Output of assoc goes here`
这将为您提供cscript.exe位置或wscript.exe位置。与Popen
Popen([r".exe location here", r".vbs location here"])