python - 从 Python 脚本启动 VirtualBox VM

标签 python batch-file subprocess virtual-machine virtualbox

我有这个简单的脚本..但不起作用

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 文件,但没有在任何地方找到它......:[

最佳答案

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”部分。

关于python - 从 Python 脚本启动 VirtualBox VM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24909998/

相关文章:

python - 将变量传递给子流程调用

python - 为什么这个带有线程的 Popen 不起作用?

python - 是否可以获取字段的所有参数

python - 带字典的列表

python - 将函数应用于 numpy 矩阵的每一行。它的索引

windows - 如何检查某些产品是否使用批处理文件安装

python - 偶尔的500错误

java - C# 程序不会从 Java 执行

用于从远程计算机复制文件的 Windows 实用程序

python - 在 python 3.5 中,当使用参数列表作为 subprocess.Popen() 的输入时,我无法获得正确的 len(sys.argv)