“python os.popen close:IOError”的版本间的差异

来自个人维基
跳转至: 导航搜索
(以“前提:手机未连上adb 版本: <pre> F:\W\MP\trunk\python> python --version Python 2.7.3 </pre> 执行如下脚本: <pre class="prettyprint"> import os imp...”为内容创建页面)
 

2015年5月6日 (三) 20:44的最后版本

前提:手机未连上adb

版本:

F:\W\MP\trunk\python> python --version
Python 2.7.3

执行如下脚本:

import os
import traceback

fout = os.popen("adb shell ls /system/bin/abcd")
fout.close()

print 'hello'

==>

F:\W\MP\trunk\python> python pytest.py
Traceback (most recent call last):
  File "pytest.py", line 5, in <module>
    fout.close()
IOError: [Errno 0] Error



对IOError进行catch后,虽也会抛出异常,但被catch后不会影响脚本的运行:

import os
import traceback

try:
    fout = os.popen("adb shell ls /system/bin/abcd")
    fout.close()
except IOError:
    #traceback.print_exc()
    pass

print 'hello'

==>

F:\W\MP\trunk\python> python pytest.py
hello

原因:python的一个bug,即当os.popen执行任务失败,返回负数时,在close时会抛出上述异常:

http://bugs.python.org/issue602245

另外,现在也不建议用os.popen,推荐使用 subprocess:

http://www.gossamer-threads.com/lists/python/bugs/615568?do=post_view_threaded#615568