<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://www.mywiki.cn/Hovercool/index.php?action=history&amp;feed=atom&amp;title=python_os.popen_close%3AIOError</id>
	<title>python os.popen close:IOError - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://www.mywiki.cn/Hovercool/index.php?action=history&amp;feed=atom&amp;title=python_os.popen_close%3AIOError"/>
	<link rel="alternate" type="text/html" href="https://www.mywiki.cn/Hovercool/index.php?title=python_os.popen_close:IOError&amp;action=history"/>
	<updated>2026-09-01T03:58:38Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://www.mywiki.cn/Hovercool/index.php?title=python_os.popen_close:IOError&amp;diff=914&amp;oldid=prev</id>
		<title>2015年5月6日 (三) 12:44 Hovercool</title>
		<link rel="alternate" type="text/html" href="https://www.mywiki.cn/Hovercool/index.php?title=python_os.popen_close:IOError&amp;diff=914&amp;oldid=prev"/>
		<updated>2015-05-06T12:44:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;前提：手机未连上adb&lt;br /&gt;
&lt;br /&gt;
版本：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F:\W\MP\trunk\python&amp;gt; python --version&lt;br /&gt;
Python 2.7.3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
执行如下脚本：&lt;br /&gt;
&amp;lt;pre class=&amp;quot;prettyprint&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
import traceback&lt;br /&gt;
&lt;br /&gt;
fout = os.popen(&amp;quot;adb shell ls /system/bin/abcd&amp;quot;)&lt;br /&gt;
fout.close()&lt;br /&gt;
&lt;br /&gt;
print &amp;#039;hello&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F:\W\MP\trunk\python&amp;gt; python pytest.py&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;pytest.py&amp;quot;, line 5, in &amp;lt;module&amp;gt;&lt;br /&gt;
    fout.close()&lt;br /&gt;
IOError: [Errno 0] Error&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
对IOError进行catch后，虽也会抛出异常，但被catch后不会影响脚本的运行：&lt;br /&gt;
&amp;lt;pre class=&amp;quot;prettyprint&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
import traceback&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    fout = os.popen(&amp;quot;adb shell ls /system/bin/abcd&amp;quot;)&lt;br /&gt;
    fout.close()&lt;br /&gt;
except IOError:&lt;br /&gt;
    #traceback.print_exc()&lt;br /&gt;
    pass&lt;br /&gt;
&lt;br /&gt;
print &amp;#039;hello&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
F:\W\MP\trunk\python&amp;gt; python pytest.py&lt;br /&gt;
hello&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
原因：python的一个bug，即当os.popen执行任务失败，返回负数时，在close时会抛出上述异常：&lt;br /&gt;
&lt;br /&gt;
http://bugs.python.org/issue602245&lt;br /&gt;
&lt;br /&gt;
另外，现在也不建议用os.popen，推荐使用 subprocess：&lt;br /&gt;
&lt;br /&gt;
http://www.gossamer-threads.com/lists/python/bugs/615568?do=post_view_threaded#615568&lt;/div&gt;</summary>
		<author><name>Hovercool</name></author>
	</entry>
</feed>