从Python脚本启动VirtualBox虚拟机

2 投票
2 回答
3501 浏览
提问于 2025-04-18 14:25

我有一个简单的脚本……但是它不工作。

import subprocess
subprocess.call(["C:\Program Files\Oracle\VirtualBox\VBoxManage.exe", "VBoxManage startvm WIN7"])

我在一个bat文件里做了同样的事情……那个运行得很好。

cd C:\Program Files\Oracle\VirtualBox
VBoxManage startvm "WIN7"

我在Windows 8.1(我的主操作系统)的环境变量中设置了VBoxManage.exe。

这个Python脚本能识别VBoxManage这个程序,并且能输出它的使用手册,然后就出现了这个……

Syntax error: Invalid command 'VBoxManage startvm WIN7'

你能告诉我怎么在Python脚本里启动一个虚拟机吗?可以直接调用这个.exe文件,或者运行那个.bat文件?

注意:我找过vboxshell.py这个文件,但到现在还没找到……:[

2 个回答

1

subprocess.call() 这个函数需要你传入一个参数列表,像这样:

subprocess.call(['C:\Program Files\Oracle\VirtualBox\VBoxManage.exe',
                 'startvm',
                 'WIN7'])

你的代码把 'VBoxManage startvm WIN7' 当作一个整体传给了 VBoxManage.exe,但它其实只想要一个命令(比如 'startvm')。后面的参数(在这个例子中就是 'WIN7')需要单独传入。

另外,使用 subprocess.call() 时,不需要重复写可执行文件的名字。Python 文档中的例子是这样调用 UNIX 命令 "ls -l" 的:

subprocess.call(['ls', '-l'])

换句话说,你不需要再写 'VBoxManage' 这一部分。

1

诀窍是将命令作为单独的参数传递

import subprocess 
subprocess.call(["C:\Program Files\Oracle\VirtualBox\VBoxManage.exe", "startvm", "WIN7"]) 

撰写回答