我目前正在为VK社交网络编写一个基于插件的服务器。插件系统是YAPSY,使用os.fork()
进行后台处理。
我为该服务器编写了一个文件服务器插件。它在我启动它之后工作得很好,但是当我关闭终端会话时我曾经启动它(我以root身份运行),LIST
命令,用于返回文件/文件夹列表就好了,开始投掷[Errno 5] Input/output error
。
我使用os.listdir
获取文件夹内容,如下所示:
elif cmd == u'list':
flist = os.listdir(self.cwd+'/'+('' if len(args)==0 else args[0]))
otp = "Listing of "+(self.cwd.replace(self.topdirpath, "<root>") if len(args) == 0 else self.cwd.replace(self.topdirpath, "<root>")+"/"+args[0])+':\n'
num = 0
flist.sort()
for fi in flist:
otp += "["+str(num)+"] "+('-DIR- ' if os.path.isdir(self.cwd+'/'+('' if len(args)==0 else args[0])+'/'+fi) else '')+str(fi)+"\n"
num += 1
self.fSay(otp,vk,'200 LIST OK')
return True
虽然我没有关闭启动服务器的SSH会话,但它的工作正常:
>> #$list
<< Listing of <root>:
[0] -DIR- AniArt
[1] -DIR- gifs
[2] -DIR- inbox
然而,一旦我注销SSH,事情就变得很奇怪了:
>> #$list
<< libakcore longpoll server
There was an error processing your request. More info:
[Errno 5] Input/output error
由于没有对文件夹内容进行任何更改,并且可以从同一个用户手动访问,因此我不知道问题是os.fork()
或os.listdir()
,还是两者都在同一时间。但是可以肯定的是,我是从一个单独的线程调用它还是从分叉的服务器线程调用它并不重要。
非常感谢任何帮助。 提前谢谢。
答案 0 :(得分:0)
显然,事实证明它与print
命令有关!
我的服务器使用fSay
发送给我的所有内容也都转到fLog
。将print
包裹在fLog
内会使所有问题都消失。
有时候事情变得非常奇怪。