【问题标题】:"IOError: [Errno 71] Protocol error" when reading a file with python in a virtualbox debian machine在 virtualbox debian 机器中使用 python 读取文件时出现“IOError:[Errno 71] 协议错误”
【发布时间】:2015-07-31 23:12:12
【问题描述】:

我尝试在 Python 2.7.3 中打开并读取在虚拟机中运行的文件:

主机:Ubuntu 14.04 LTS

来宾:Debian Wheezy 7.5

虚拟机软件:VirtualBox V4.3.30

在 VM 内的 Python 控制台中,我输入以下内容:

>>> f = open("Testing/results.txt", "w+")
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 71] Protocol error

文件存在且位于共享文件夹中。如果我尝试对位于 VM 文件系统上的文件执行相同操作,则它可以正常工作。同样以“r+”或“a+”模式打开文件,它可以工作,但不会被截断。在以读取模式打开后手动截断文件是有效的,目前,我使用它作为解决方法。但也许这里有人知道,为什么会出现这个错误?

【问题讨论】:

  • 我猜这是主机端共享文件夹的权限问题。您可以尝试让共享文件夹更容易获得主机的许可吗?
  • 您使用的是什么类型的共享?视窗?桑巴? VirtualBox 共享?
  • docs.python.org/3.6/tutorial/… f = open("Testing/results.txt", "rb+") 应该适合你。
  • 与您要打开的文件相关的 python 脚本在哪里?是在同一个目录吗?
  • 1.你试过用C打开文件吗? Python 3?

标签: python linux debian virtual-machine virtualbox


【解决方案1】:

此错误的最可能原因是 VirtualBox Linux 来宾添加中的错误,更具体地说,它的设备驱动程序之一vboxguest(与主机通信)和vboxsf(在vboxguest 之上的客人)。

背景:在 VirtualBox 共享文件上使用 Linux read(2) 系统调用时,特定条件会导致 VirtualBox 驱动程序失败并出现错误 71 (EPROTO) – Protocol error(请参阅下面的票证)。该错误源自 Linux 内核空间并通过 C 库传播到应用程序(请参阅errno(3))。在这种情况下,应用程序恰好是 Python 解释器。

Python 代码或文件权限没有问题。该代码仅执行触发错误的合法操作序列。

相关VirtualBox门票:

根据票证 #8463,此错误(或相关错误)已于 2017 年 1 月 17 日在 VirtualBox Linux Guest Additions 5.1.14 / 5.0.32 中修复。

【讨论】:

    猜你喜欢
    • 2017-02-26
    • 1970-01-01
    • 2012-03-24
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多