【问题标题】:Starting a VirtualBox VM from a Python Script从 Python 脚本启动 VirtualBox VM
【发布时间】:2014-09-14 14:36:38
【问题描述】:

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

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(我的主机操作系统)的 PATH 中有 VBoxManage.exe。

python 脚本理解 VBoxManage 可执行文件并吐出它的手册,然后是这个..

Syntax error: Invalid command 'VBoxManage startvm WIN7'

您能否给我一种从 python 脚本中启动 VM 的方法,直接调用 .exe 或运行 .bat 文件?

注意:我已经搜索了 vboxshell.py 文件,但在任何地方都没有找到它...:[

【问题讨论】:

  • :] 我找到了...毕竟很简单 # start the vm import subprocess subprocess.call(["C:\Program Files\Oracle\VirtualBox\VBoxManage.exe", "startvm ", "WIN7"])
  • 如果您找到了解决方案,请花一些时间将其作为答案发布并接受。它可以帮助其他人知道,这个问题已经解决了!
  • 哦,好吧,不知道。谢谢

标签: python batch-file subprocess virtual-machine virtualbox


【解决方案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”部分。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-08
      • 1970-01-01
      • 2023-03-15
      • 2017-07-05
      • 2017-04-07
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      相关资源
      最近更新 更多