【发布时间】:2012-06-16 08:58:04
【问题描述】:
我在 .hta 文件中使用 JScript(几乎与 VBScript 相同)来打开一个新的 shell 命令并捕获其输出。这是我在谷歌搜索后得到的结果:
var shell = new ActiveXObject("WScript.Shell")
var e = shell.Exec("%comspec% /c ping google.com 2>&1 ")
while(!e.StdOut.AtEndofStream) {
var line = e.StdOut.ReadLine()
document.getElementById('log').value = line
}
这行得通。但是,它不是异步的。 while 循环导致我的 .hta 界面只是阻塞(UI 变得不可用),直到 shell 命令完成。如果我删除while loop,shell.Exec 命令似乎不会阻塞,所以问题出在循环中。
我认为阻塞问题只是因为我处于 .hta 环境中而发生。如果我使用cscript.exe通过命令行运行我的脚本,这似乎不会发生
如何避免阻塞行为并实时访问我的命令输出?
【问题讨论】:
-
循环仍然在 cscript.exe 中阻塞,但由于控制台窗口由辅助进程 (conhost/csrss) 控制,因此您不会注意到阻塞(这对于控制台应用程序来说是正常且正常的做)
标签: windows command-line vbscript hta jscript