前言
记录一下最近的开发过程中遇到的一些问题和解决办法。
Python 静态方法问题
Python的类方法中,一旦某个方法被声明为静态方法,即加入了修饰符@staticmethod,该方法只能直接访问自己声明的一些变量,不能通过self指针访问类中的实例属性。
我使用了一个watchdog的轮子实现文件监控,按照文档样例覆写了父类中的on_any_event()方法,且需要使该方法成为静态方法。框架如下:
class Handler(FileSystemEventHandler): |
其中,有一行语句需要访问调用该类的控制器controller,但是不能通过self.controller访问,需要采用Handler.controller
这样的方法访问,同时在外部需要对该controller赋值。例如:
Handler.controller._model.alter_operation(sql) |
子进程调用问题
问题来源
我生成了一个bash脚本,想要在Python程序运行过程中通过subprocess库执行这个shell脚本。于是我采用了subprocess.Popen()
方法执行。大致情况如下:
f = open("import.sh", "w+") |
问题是,如果在Popen后没有其他的Python语句,该条语句能够正常执行,bash脚本运行正常,但是一旦在此条语句后加入任何的Python语句,如print(),该bash脚本都不能正常工作。
解决方案
这其实是个假的解决方案,留有隐患,因为我还不知道这个问题的机理,只是想办法绕过了它。绕过办法很简单,就是把原先写在subprocess.Popen(["/bin/bash",'./import.sh'])
这一行后的所有语句都等价地修改成bash脚本中的内容,这样使其成为最后的一行Python语句,能够正常执行。改天一定要搞清楚这里到底是怎么回事。