在虚拟机Debian中使用Python读取文件时出现“IOError:[Errno 71]协议错误”的错误。

21

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

主机:Ubuntu 14.04 LTS

客户端:Debian Wheezy 7.5

虚拟机软件:VirtualBox V4.3.30

在虚拟机内的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 +”模式打开文件可以工作,但不会被截断。在读取模式下手动截断文件是有效的,目前我将其用作解决方法。但也许这里有人知道为什么会出现这个错误?


4
我猜测这是由于主机端共享文件夹的权限问题导致的。你可以尝试从主机端将共享文件夹的权限设置得更加宽松一些。 - Joe Young
你使用的是哪种共享类型?Windows?SAMBA?VirtualBox共享? - Justin Andrusk
2
f = open("Testing/results.txt", "rb+") 应该适用于您。 - AjayShelar
Python脚本相对于您要打开的文件在哪里?它是否位于同一个目录中? - Lateralus
你试过在C语言中打开文件吗?Python 3呢? - xjcl
大多数在线结果似乎表明这是Linux系统的错误71。 - xjcl
1个回答

1
这个错误最可能的原因是VirtualBox Linux Guest Additions中的一个设备驱动程序vboxguest(与主机通信)和vboxsf(在vboxguest上为客户提供共享文件夹服务)出现了错误。背景:当在VirtualBox共享文件上使用Linux read(2)系统调用时,特定条件会使VirtualBox驱动程序因错误71(EPROTO-协议错误)而失败(请参见下面的票证)。该错误起源于Linux内核空间,并通过C库传播到应用程序(请参见errno(3))。在这种情况下,应用程序恰好是Python解释器。Python代码或文件权限没有问题。代码只是执行了一个合法的操作序列,触发了错误。相关的VirtualBox票证:

根据工单#8463,这个错误(或相关错误)已经在2017年1月17日的VirtualBox Linux Guest Additions 5.1.14 / 5.0.32中得到修复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接