在我的代码的某处,我有类似的东西:
logger = logging.getLogger('debug0.x')
Run Code Online (Sandbox Code Playgroud)
我理解它的方式,这应该只在我以前做过类似的事情时才会响应:
logging.basicConfig(filename='10Nov2010a.txt',level=logging.DEBUG, name='debug0')
Run Code Online (Sandbox Code Playgroud)
请注意,名称已定义为debug0.但是,我发现如果这样做
logging.basicConfig(filename='10Nov2010a.txt',level=logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)
如果没有name关键字,则上面定义的debug0.x logger会做出反应,并写入日志文件.我认为它只会在第一种情况下做出反应,当记录器被命名时.
我糊涂了.
我正在使用type()动态生成最终将被pickle的类.问题是un-pickling进程需要类的定义才能重新构造被pickle的对象.
这就是我被困住的地方.我不知道如何以某种方式为 unpickler 提供一种从动态生成的类生成实例的方法.
任何提示赞赏.
谢谢!
这是一个问题的例子:
>>> class Foo(object):
... pass
>>> g=type('Goo',(Foo,),{'run':lambda self,x: 2*x } )()
>>> cPickle.dumps(g)
PicklingError: Can't pickle <class '__main__.Goo'>: attribute lookup __main__.Goo failed
Run Code Online (Sandbox Code Playgroud)
这显然是有效的,但仅限于从可发现的基类(具有可查找的模块定义)创建的动态类:
import cPickle
class Foo(object): pass
def dynamic(): return type('Goo',(Foo,),{'run':lambda self,x: 2*x } )()
g=type('Goo',(Foo,),{'run':lambda self,x: 2*x , '__reduce__': lambda self: (dynamic,tuple()) } )()
gg=cPickle.loads ( cPickle.dumps(g) )
print gg.run(10)
Run Code Online (Sandbox Code Playgroud) 我注意到即使我的Python代码中有很多doctests,当我使用这里描述的方法跟踪测试时:
我发现有些行代码从未执行过.我目前正在筛选traceit日志以识别从未运行的代码块,然后尝试提出不同的测试用例来运行这些特定的块.你可以想象,这是非常耗时的,我想知道我们是否正在以错误的方式解决这个问题以及你们是否有其他建议或建议来处理这个问题,我肯定必须这样做,因为软件变成了足够复杂.
我知道可以在IronPython中使用Powershell,但除了使用Popen()和其他类似的调用之外,使用CPython是否可行?我正在尝试做一些非常基本的.NET框架编程(Windows窗体等),就像你可以使用CPython在IronPython中做的那样.
谢谢!
任何帮助赞赏.
我一直在环顾四周,但我找不到如何使用pyhook来响应键组合的示例,例如Ctrl+,C而很容易找到如何响应单个按键的示例,如单独Ctrl或C单独按键.
顺便说一下,我在谈论Windows XP上的Python 2.6.
任何帮助赞赏.
有没有人知道一个方法,或者一个插件,它会自动折叠Python中的长文档字符串?我的代码中包含跨多个页面的文档字符串,因此继续进行分页是很麻烦的.另一个棘手的部分是文档字符串中存在嵌入式python测试代码,因此可能会使解析它们变得困难.请注意,我只需要自动折叠整个 文档字符串,无论其中包含什么内容.
from traits.api import HasTraits, List
import cPickle
class Client(HasTraits):
data = List
class Person(object):
def __init__(self):
self.client = Client()
# dynamic handler
self.client.on_trait_event(self.report,'data_items')
def report(self,obj,name,old,new):
print 'client added-- ' , new.added
if __name__ == '__main__':
p = Person()
p.client.data = [1,2,3]
p.client.data.append(10)
cPickle.dump(p,open('testTraits.pkl','wb'))
Run Code Online (Sandbox Code Playgroud)
上面的代码报告了一个动态特征.一切都在此代码中按预期工作.但是,使用新的 python进程并执行以下操作:
>>> from traits_pickle_problem import Person, Client
>>> p=cPickle.load(open('testTraits.pkl','rb'))
>>> p.client.data.append(1000)
Run Code Online (Sandbox Code Playgroud)
导致没有列表的报告追加.但是,分别重新建立监听器如下:
>>> p.client.on_trait_event(p.report,'data_items')
>>> p.client.data.append(1000)
client added-- [1000]
Run Code Online (Sandbox Code Playgroud)
使它再次工作.
我是否遗漏了某些东西,或者__setstate__在拆除过程中是否需要重新建立处理程序.
任何帮助赞赏.这适用于具有特征版本4.30的Windows上的Python 2.7(32位).
如何配置ipywidgets长文本字符串的复选框,如下所示,
c = Checkbox(description=' this is some very long very long text',value=False)
Run Code Online (Sandbox Code Playgroud)
而不是让文本被挤压并包裹在周围的 Jupyter 笔记本中?
谢谢!
使用Python Win32扩展,如何在Windows XP上创建任意窗口透明?
我真的很喜欢python coverage模块:
http://nedbatchelder.com/code/coverage/
Run Code Online (Sandbox Code Playgroud)
以及它生成的HTML页面。是否将此与配置文件结合使用,以便可以看到coverage +配置文件的统一HTML报告。
提前致谢。
python ×9
windows ×2
automation ×1
class ×1
dynamic ×1
ipywidgets ×1
keyboard ×1
logging ×1
pickle ×1
powershell ×1
profiling ×1
pywin ×1
pywin32 ×1
testing ×1
traits ×1
unit-testing ×1
vim ×1
winapi ×1