首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >打印时出现IOError输入/输出错误

打印时出现IOError输入/输出错误
EN

Stack Overflow用户
提问于 2012-05-02 16:05:17
回答 6查看 27.2K关注 0票数 21

我继承了一些代码,这些代码由于在调用打印时引发输入/输出错误而周期性(随机)失败。我正在尝试确定引发异常的原因(或者至少更好地理解它)以及如何正确处理它。

在执行以下Python行时(在2.6.6解释器中,在CentOS 5.5上运行):

print >> sys.stderr, 'Unable to do something: %s' % command

引发异常(忽略回溯):

IOError: [Errno 5] Input/output error

对于上下文,这通常是更大的函数在当时试图做的事情:

from subprocess import Popen, PIPE
import sys
def run_commands(commands):
    for command in commands:
        try:
            out, err = Popen(command, shell=True, stdout=PIPE, stderr=PIPE).communicate()
            print >> sys.stdout, out
            if err:
                raise Exception('ERROR -- an error occurred when executing this command: %s --- err: %s' % (command, err))
        except:
            print >> sys.stderr, 'Unable to do something: %s' % command
run_commands(["ls", "echo foo"])

我并不特别熟悉>>语法,我也不经常使用它,我知道它可能是写入标准错误的least preferred way。然而,我不相信替代方案能解决根本问题。

从我读过的文档来看,IOError 5经常被误用,而且定义有些松散,不同的操作系统使用它来解决不同的问题。在我的例子中,我能看到的最好的情况是,python进程不再附加到终端/pty。

据我所知,没有什么会断开进程与stdout/stderr流的连接-例如,终端仍然是打开的,一切“看起来”都很正常。会不会是子进程以不干净的方式终止?这个问题的其他原因可能是什么--或者我可以引入哪些其他步骤来进一步调试它?

在处理异常方面,我显然可以捕获它,但我假设这意味着在剩余的执行过程中不能打印到stdout/stderr?我能以某种方式重新连接到这些流吗--比如将sys.stdout重置为sys.__stdout__等?在这种情况下,不能写入stdout/stderr不被认为是致命的,但如果这是开始出错的迹象,我宁愿早点离开。

我想我最终还是有点迷茫,不知道从哪里开始调试这个……

EN

回答 6

Stack Overflow用户

发布于 2014-01-08 21:53:14

我认为这与进程附加到的终端有关。当我在后台运行python进程并关闭启动它的终端时,我得到了这个错误:

$ myprogram.py
Ctrl-Z
$ bg
$ exit

问题是我在远程服务器上启动了一个非守护进程并注销(关闭终端会话)。一种解决方案是在远程服务器上启动一个screen/tmux会话,并在此会话中启动该进程。然后,分离session+log将保持终端与进程相关联。这至少在*nix世界中是有效的。

票数 14
EN

Stack Overflow用户

发布于 2012-07-27 23:17:51

我也遇到过类似的问题。我有一个程序,它正在使用子进程模块启动其他几个程序。然后,这些子进程将把输出打印到终端。我发现,当我关闭主程序时,它并没有自动终止子进程(正如我假设的那样),而是它们继续运行。因此,如果我既终止了主程序,又终止了启动它的终端*,子进程的标准输出就不再有终端,并且会抛出一个IOError。希望这对你有帮助。

*注意:必须按此顺序进行。如果您只是终止终端,(出于某种原因),这将同时终止主程序和子进程。

票数 6
EN

Stack Overflow用户

发布于 2012-12-22 23:26:33

我得到这个错误是因为我写入文件的目录内存不足。不确定这是否适用于您的情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10409897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档