sys.setdefaultencoding 引发 [Bad file descriptor]解决

By | 08月14日
Advertisement

为了彻底解决python转码的问题,我们可能需要在程序启动的时候加上下面两句:

reload(sys)
sys.setdefaultencoding("utf-8")

但是如果我们以这样的方式来启动:
python test.py >> test.log

那么会看到这样的错误:
IOError: [Errno 9] Bad file descriptor: '<fdopen>'

究其原因 是 reload(sys)导致,因为这个函数会重置 sys.stdout

【如何解决】

a = sys.stdout
reload(sys)
sys.setdefaultencoding("utf-8")

也就是只要我们在reload方法之前引用一下sys.stdout就可以了,很神奇吧,说明python的reload会检查sys下面的变量的引用计数。

Similar Posts:

  • JBoss: IOException Bad file descriptor

    网站运行一段时间以后JBoss(JBoss4.0.5GA,集成了Tomcat5.5)就报"Bad file descriptor"和"java.lang.ArrayIndexOutOfBoundsException"错误. 看到网上有关"Java IO Bad file descriptor"的资料,好像是JVM的一个BUG(但是1.4的时候已经修复了),把JDK.JBoss分别升级到了jdk-1_5_0_15-linux-i586.JBoss4

  • 为什么有时候必须添加sys.setdefaultencoding(&amp;amp;#39;utf-8&amp;amp;#39;)

    今天在尝试Python的CGI模块时遇到中文字符不能正确显示的问题,很郁闷.在网上仔细找了找,终于解决了这个问题,现在将解决方法陈述如下,以防下次失误. 页面源代码如下 #-*- coding: utf8 -*- import cgitb , cgi cgitb.enable() form = cgi.FieldStorage() if (form.has_key("name") and form.has_key("addr")): print "<

  • linux - epoll_create, epoll_create1 - open an epoll file descriptor

    EPOLL_CREATE(2) Linux Programmer's Manual EPOLL_CREATE(2) NAME epoll_create, epoll_create1 - open an epoll file descriptor SYNOPSIS #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags); DESCRIPTION epoll_create() creates a

  • Linux的open file 与 file descriptor区别

    1 open file An open file may be a regular file, a directory, a block special file, a character special file, an executing text reference, a library, a stream or a network file. 2 file descriptor A file descriptor is a data structure used by a program

  • Linux下FILE结构与“File descriptor”的区别

    在学习linux,在linux下使用c语言练习系统调用的时候,经常会遇到与文件相关的操作.一般来讲打开一个文件我们会得到这个文件对于的文件描述符fd"file descriptor":另外在另一些系统调用里我们又常常遇到FILE这个结构.不知道最初是为什么,反正我一直认为这两者是完全一样的东西,FILE只不过是typedef后的int而已.直到有一天上机时遇到了奇怪的问题,才被迫在man中详细读了file descriptor相关的东西,才发现这两者不是一回事,而且两者混用的情况是不推

  • BCGControlbar生成Ribbon界面在主按钮显示FILE的解决方法。

     BCGControlbar生成Ribbon界面在主按钮显示FILE的解决方法. 我采用BCGControlbar生成Ribbon界面程序时,在左上角的主按钮上显示"FILE",想改为"文件",找了很久终于找到了,方法如下: 打开BCGCBPro100.sln(对应于VS 2010)或者BCGCBPro***.sln,找到: BCGPWorkSpace.cpp 在SetVisualTheme函数中将_T("File")替换为_T("

  • SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(下)

    sys.dm_os_waiting_tasks 引发的疑问(下) 前面写了两篇了,其实不光是说sys.dm_os_waiting_tasks的应用,研究了挺长时间的并行,自己有了一些理解,所以分享出来希望有什么理解错误的地方大神们及时纠正!! 给出前两篇的连接: SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(上) SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(中) 前面两篇的编写有一个疑惑...最初认为的并行比如这个语句

  • Modify File Descriptor Limit on Linux

    System-wide File Descriptor Limit Get current value: sysctl fs.file-max modify max fd limit: sysctl -w fs.file-max=10000 User File Descriptor Limit Get current value: ulimit -n modify max fd limit: ulimit -n 10000 use ulimit -a to print all limits of

  • MyEclipse中启动tomcat报错:&quot;bad version number in .class file&quot;的解决方法

    MyEclipse中启动tomcat报错:"bad version number in .class file "的解决方法 项目没有错误,在项目部署到tomcat后,tomcat启动时报错: java.lang.UnsupportedClassVersionError: Bad version number in .class file ... 这个问题应该不少同学遇到过,原因应该是编译java时生成的class文件,在运行时用到的JRE和class文件版本不一致造成的. 1 .如果

  • Starting MySQL....The server quit without updating PID file错误解决办法

    出现错误:Starting MySQL....The server quit without updating PID file 检查错误文件: /var/lib/mysql/xxxx.err,根据其中的ERROR提示进行解决. my.cnf中的项名错误也会导致出现该错误.

Tags: