【问题标题】:How to read files from a virtual machine using python如何使用python从虚拟机中读取文件
【发布时间】:2014-01-24 03:58:55
【问题描述】:

我正在使用 Oracle VirtualBox 在我的系统上运行虚拟机,我想要完成的是从我的物理系统读取虚拟机上的文件。我正在使用 virtualbox api (pyvbox) 与 VirtualBox 交互。这是我第一次使用 virtualbox api。

更新

>>> import virtualbox
>>> vbox = virtualbox.VirtualBox()
>>> vm =vbox.find_machine("XPBox")
>>> session = vm.create_session()
>>> gs = session.console.guest.create_session('xphandler' , ' qwerty')
>>> process, stdout, stderr = gs.execute('C:\\Windows\\System32\\cmd.exe', ['/C', 'tasklist'])

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    process, stdout, stderr = gs.execute('C:\\Windows\\System32\\cmd.exe', ['/C', 'tasklist'])
  File "C:\Python27\lib\site-packages\virtualbox\library_ext\guest_session.py", line 54, in execute
    process.wait_for(int(library.ProcessWaitResult.start), 0)
  File "C:\Python27\lib\site-packages\virtualbox\library.py", line 13666, in wait_for
    reason = ProcessWaitResult(reason)
  File "C:\Python27\lib\site-packages\virtualbox\library.py", line 121, in __init__
    raise ValueError("Can not find enumeration where value=%s" % value)
ValueError: Can not find enumeration where value=None
>>> 

这是我输入下面给出的解决方案时的输出。

【问题讨论】:

  • 你试过什么?什么没有奏效?您需要确保您尝试访问的文件对物理机的文件系统可见。

标签: python virtual-machine virtualbox


【解决方案1】:

仔细阅读pyvbox 文档。我相信你能想出一些解决办法。下面给出的文档中的示例不是您想要的,而是一个很好的启动参考。

ipython

In [1]: import virtualbox

In [2]: vbox = virtualbox.VirtualBox()

In [3]: vm = vbox.find_machine('test_vm')

In [4]: session = vm.create_session()

In [5]: gs = session.console.guest.create_session('Name', 'password')

In [6]: process, stdout, stderr = gs.execute('C:\\Windows\\System32\\cmd.exe', ['/C', 'tasklist'])

In [7]: print stdout

【讨论】:

  • 是的,我试过这段代码。但它给了我一个错误,我已经粘贴了上面的回复。
  • 错误来自 Enum 类的构造函数。值为无的地方。现在很难说出你身边发生了什么。因此,请查看 library.py 并尝试调试为什么该值为 none。 github.com/mjdorma/pyvbox/blob/master/virtualbox/library.py 也可以尝试使用 pyvbox 链接中的示例“将文本写入正在运行的机器上的窗口:”而不是第 6 行。让我知道你的发现。星期一我可以进行设置并解决问题。
  • 好的,会的。我也会尝试。
【解决方案2】:

以下是有关如何从来宾 VM 复制的示例: https://gist.github.com/mjdorma/9044686

您发布的回溯似乎发生在许多用户身上。它在 IProcess.wait_for 返回 None 时发生。该库尝试枚举返回的 ProcessWaitResult 类型。当 vboxapi 从尝试调用 IProcess.wait_for COM 接口返回 None 时会发生这种情况。

 In [5]: virtualbox.library.IProcess.wait_for?
Type:       instancemethod
String Form:<unbound method IProcess.wait_for>
File:       virtualbox\library.py
Definition: virtualbox.library.IProcess.wait_for(self, wait_for, timeout_ms)
Docstring:
Waits for one or more events to happen.

in wait_for of type int
    Specifies what to wait for;
    see <link to="ProcessWaitForFlag"/> for more information.

in timeout_ms of type int
    Timeout (in ms) to wait for the operation to complete.
    Pass 0 for an infinite timeout.

return reason of type ProcessWaitResult
    The overall wait result;
    see <link to="ProcessWaitResult"/> for more information.

提示:确保您在运行 pyvbox 时运行的是最新版本的 virtualbox。

【讨论】:

    猜你喜欢
    • 2019-04-30
    • 2019-11-03
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    相关资源
    最近更新 更多