virtualbox - Vboxmange 命令产生新窗口 - 使用 go os.exec 测试运行 - 为什么 - 我该如何修复?
问题描述
尝试调试在 Win7 上运行 vboxmange 的 docker-machine 的问题。无法使用 docker-machine,因为它无法捕获 vboxmanage 命令的输出(生成一个单独的窗口来运行 VBoxManage 命令)。
使用以下测试代码运行 vboxmange 命令,它会生成一个新窗口,因此标准输出为空;
package main
import (
"bytes"
"fmt"
"log"
"os/exec"
)
func main() {
cmd := exec.Command("C:\\Program Files\\Oracle\\VirtualBox\\vboxmanage.exe", "--version")
//cmd := exec.Command("C:\\Program Files\\Docker Toolbox\\docker.EXE", "help")
var stdout bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
fmt.Printf("StdOut: %q\n", stdout.String())
}
如果我运行 docker 命令(上面已注释掉),该命令运行时不会产生新窗口,并且会捕获输出。
仅供参考,我正在使用 VBoxManage 版本 5.2.8r121009
我意识到这可能与我的 Win7 环境有关,但我找不到解决方案 - 感谢帮助!
编辑:如果我在同一个提示符下运行 VBoxManage 命令并重定向到一个文件 - 它可以正常工作,所以这非常令人费解!
EDIT2:这不是 golang 问题,因为我也可以在 python 中重新创建问题。在同一个命令行中再次正常工作,“vboxmanage.exe --version > output.txt”在同一个 cmd 窗口中运行,但是当在下面运行这个片段时,它会产生一个新窗口;
import subprocess
result = subprocess.run(['C:\\Program Files\\Oracle\\VirtualBox\\vboxmanage.exe', '--version'], stdout=subprocess.PIPE)
print('stdout:', result.stdout)
所以这一定是 VBoxmanage 的问题!(删除了 go 标签)
编辑3:
我已经用 Docker 和 Oracle 开了票,但我没有太大希望......
解决方案
问题似乎是环境问题,而不是 docker、virtual box 或 windows 的原因。请看线程;https://github.com/docker/machine/issues/4548
我发现不是炭黑导致我的系统出现问题!
CB 日志文件 (confer.log) 非常有用,所以我浏览了它们。启动 vboxmanage 时,我注意到 docker-machine 和我的 vboxtest.exe 都被拦截,并且 vboxmanage 正在由 windows\system32\pmlauncher.exe 运行,谷歌搜索表明这是 AVG,但如果你检查文件则不是描述为“ BeyondTrust PowerBroker for Windows Launcher ”。
有一个 BeyondTrust PowerBroker 服务,所以我停止了它,然后 vboxtest.exe 和 docker-machine 命令都可以工作......
<stopped beyond trust>
C:\temp>testvbox
StdOut: "5.2.16r123759\r\n"
<started beyond trust>
C:\temp>testvbox
StdOut: ""
推荐阅读
- d - 如何在 foreach 循环中查看和推进范围
- quarkus - 具有 json-b 和私有属性可见性的 quarkus
- javascript - 使用 javascript 提交验证所需的属性
- javascript - React 子组件未使用来自 redux 的 prop 重新渲染
- python - 如何从 Python 中的嵌套 json 中提取列表项?
- angular - 如何在 Angular 的解析器管道中进行过滤?
- angular - 在列出 chnages 时使用初始值填充 Observable
- python - Keras Lambda 的工作原理
- angular - 在非活动 ngb-tab 上使用带有 GeoJson 的 fitbounds 的 agm-map
- python - 如何将 BeautifulSoup 的输出保存为 csv?