32位python的bug:os.system返回码一直为0

2016年9月26日 20:33

32位python在windows上调用命令行(os.system或subprocess.Popen)。执行后,如果返回码太大,python取得的返回值也是0。此时无法判断执行成功还是失败,这个是32位python的bug。
 
以时间同步命令w32tm位例子

在cmd上执行

C:\WINDOWS\system32>w32tm /resync
发生下列错误: 服务尚未启动。 (0x80070426)

C:\WINDOWS\system32>echo %errorlevel%
-2147023834

在64位python上执行

>>> os.system("w32tm /resync")
发生下列错误: 服务尚未启动。 (0x80070426)
-2147023834

在32位python上执行

>>> os.system("w32tm /resync")
发生下列错误: 服务尚未启动。 (0x80070426)
0
注意:此时命令执行错误的返回码也是0。
通常成功返回码才是0,这里执行错误,返回码却是也0。当要判断执行成功还失败时,这里便是个坑。
  • os.system文档
https://docs.python.org/2/library/os.html
 

Tags: popen system python
评论(0) 阅读(937)

django如何使用restful风格

2015年6月06日 15:24

个人比较喜欢restful风格,以为django要安装rest framework才支持restful. 偶然发现只需继承View类即可.
 
from django.views.generic import View

class TaskView(View):
    # 获取
    def get(self, request, *args, **kwargs):
        print request.GET
    # 新建
    def post(self, request, *args, **kwargs):
        print request.POST
    # 更新
    def put(self, request, *args, **kwargs):
        print request.body
    # 删除
    def delete(self, request, *args, **kwargs):
        print request.body

# 路径配置
#url(r'task/$', TaskView.as_view())
 

Tags: python
评论(0) 阅读(1215)

理解select模块--等待IO完成

2014年1月26日 17:24

Tags: 非阻塞 python
评论(0) 阅读(1186)

线程里的全局变量threading.local

2014年1月09日 17:09

通常情况下,子线程可以访问主线程中的变量,并且可以修改它。
如果线程希望有自己的变量,不允许其它线程修改。这种情况怎么办?
利用threading.local模块就可以解决这种问题。
#encoding=utf-8
from threading import local, Thread, currentThread

threadeddict = local()
threadeddict.name = "main"

ctx = {"username": "abc"}


class LocalThread(Thread):
    def run(self):
        print "-----local-------"
        print currentThread()
        print threadeddict.__dict__   # 可以访问到主线程中的变量,但是访问不了它的内容
        print ctx                     # 变量和内容都可以访问
        threadeddict.name = self.getName()  # 改变值不会影响主线程
        print threadeddict.__dict__

if __name__ == '__main__':
    print "-----main-------"
    print currentThread()
    print threadeddict.__dict__

    A = LocalThread()
    A.start()
    A.join()

    print "-----main-------"
    print currentThread()
    print threadeddict.__dict__
 
ctx变量对子线程而言有两个特征:
1.全局的(子线程内部都可访问)
2.可以访问修改的
 
threadeddict对子线程而言只有一个特征:全局的。只剩下一个全局变量名。
 

 

Tags: python
评论(0) 阅读(1509)