我们如何检测线程在python应用程序中运行的时间?
动机:我们最近正在调试一个大型Python应用程序,该应用程序有几个客户提供的模块,这些模块没有源代码.对我们(以及我们的客户!)不感兴趣,其中一个模块将在非常特定(和未记录)的条件下启动线程.这些线程引起意想不到的副作用,以意想不到的方式改变了我们 如果不是我的团队坚持找出副作用来自哪里的任务,那么整个调试场景将会很有趣:)
我们终于发现当其中一个线程引发了一个未捕获的错误时发生了什么.如果没有发生这种情况,我们仍然会把头发拉出来.
因此,这就是为什么我们正在寻找一种方法来检测应用程序中线程的存在.
以下是我们提出的一些可能的技术以及相应的挑战:
Grep线程/线程的源代码.挑战:我们并不总是能够访问源代码.即使我们可以在源代码中找到线程创建的实例,我们仍然需要一种实时技术来检测线程当前是否处于活动状态.
在sys.modules中查找线程或线程.挑战:只确保加载这些模块 - 并不能证明线程当前正在运行.
Monkey-patch Python标准线程/线程库,为我们提供线程创建时的线索.挑战:仅告诉我们是否已创建线程 - 不提供有关线程当前是否正在运行的任何信息.
谢谢!马尔科姆
有没有办法让py2exe在library.zip和/或exe文件本身(使用zipfile = None)中嵌入静态文件(和/或静态文件的子目录),然后在运行时透明地从代码中访问这些嵌入的静态文件?
谢谢你,马尔科姆
我正在解析由Word 2003+生成的RTF 1.5+文件,这些文件可能包含其他语言的内容.此内容通常编码为十六进制文字(\'xx).我想将这些文字转换为unicode值.
我通过查找ansicpg(\ ansi\ansicpg1252)来了解我的文档代码页.
当我使用ansicpg代码页解码为Unicode,多语言(如法国)似乎转换成我期望的Unicode字符值.
但是,当我看到俄语文本(如下所示)时,代码页1252将内容解码为乱码.
\ f277\lang1049\langfe1033\langnp1049\insrsid5989826\charrsid6817286\'D1 \' F2\'F0 \' E0\'编\' E8\'F6 \' FB\'E1 \' E5\'E7 \' 编\" E0\'E7 \' E2\'E0 \' 编\ 'E8 \' FF.\ 'DD \' F2\'E0 \' F1\'F2 \' F0\'E0 \' 编\ 'E8 \' F6\'E0 \' 编\ 'E5 \' E4\'EE \' EB \" E6\'编\' E0\'EE \' F2\'EE \' E1\'F0 \' E0\'E6 \' E0\'F2 \' FC\'F1 \' FF\'E2 \' F2\'E0 \' E1\'EB \' E8\'F6 \' E5\'E2 \' F1\'EE \' E4\'E5 \' F0\'E6 \' E0\'编\' E8 \'E8 …
是否可以创建带有自动换行的多行标签,并与其父级的宽度同步调整大小?换句话说,当您更改记事本窗口的宽度时,记事本的自动换行行为。
用例是一个对话框,需要完整显示一个多行文本块(指令),而不会剪切文本或使用滚动条。父容器将具有足够的垂直空间以适应狭窄的宽度。
我一直在尝试使用Tkinter标签和消息小部件以及ttk标签小部件,但均未成功。似乎我需要对像素的wraplength值进行硬编码,而让这些控件在文本到达容器的右边缘时自动自动换行。当然,Tkinters几何管理器可以帮助我自动调整标签大小并相应地更新其包裹长度值吗?
我应该看一下Text小部件吗?如果是这样,是否可以隐藏“文本”小部件的边框,以便可以将其用作带有自动换行的多行标签?
这是一个人如何做我上面描述的原型。它的灵感来自Bryan Oakley的技巧,该技巧使用了Text小部件以及Stackoverflow上的以下文章: 在python的tkinter中,我如何制作一个Label,以便可以用鼠标选择文本?
from Tkinter import *
master = Tk()
text = """
If tkinter is 8.5 or above you'll want the selection background to appear like it does when the widget is activated. Comment this out for older versions of Tkinter.
This is even more text.
The final line of our auto-wrapping label that supports clipboard copy.
""".strip()
frameLabel = Frame( master, padx=20, pady=20 )
frameLabel.pack()
w = Text( frameLabel, wrap='word', font='Arial 12 italic' ) …Run Code Online (Sandbox Code Playgroud) 有没有办法自定义Tkinter/ttk小部件或框架的边框颜色?
我正在研究Tkinter Listbox小部件,但无法找到以下功能的解决方案:
如何创建不可选择的水平分隔符项,例如.相当于Tkinter Menu小部件的.add_separator()的分隔符?(使用破折号和下划线等字符看起来很糟糕).
如何禁用特定项目?我尝试使用.itemconfig(index,state ='disabled')但没有成功.
如何启用键盘导航,例如.当用户的键盘输入自动向前滚动到以用户键入的文本开头的最近项目时?我必须绑定('<KeyPress>,...)并自己管理此行为吗?
使用Text小部件或ttk Treeview小部件可以更容易地实现上述某些功能吗?
谢谢你,马尔科姆
Python 2.7/Windows:我的理解是我们可以使用cursor='@file.cur'语法加载自定义鼠标光标:
widget = tkinter.Label( ..., cursor='@help.cur' )
Run Code Online (Sandbox Code Playgroud)
这是我收到的回溯:
Traceback (most recent call last):
File "<pyshell#82>", line 1, in <module>
widget.config( cursor='@help.cur' )
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1202, in configure
return self._configure('configure', cnf, kw)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1193, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
TclError: bad cursor spec "@help.cur"
Run Code Online (Sandbox Code Playgroud)
是否可以使用 Tkinter、Tkinter 扩展或通过 Win32 API 调用在 Windows 下加载自定义鼠标光标?
关于如何创建允许用户鼠标拖动没有边框的窗口的事件绑定的任何建议,例如.用overridedirect(1)创建的窗口?
使用案例:我们想创建一个浮动的工具栏/调色板窗口(没有边框),我们的用户可以在他们的桌面上拖动它们.
这就是我的想法(伪代码):
__PRE__
Tkinter是否暴露了足够的功能以允许我实现手头的任务?或者是否有更容易/更高级别的方法来实现我想要做的事情?
有人可以证实了Python 2.6 FTPLIB不会不支持Unicode文件名?或者必须对Unicode文件名进行特殊编码才能与ftplib模块一起使用?
以下电子邮件交换似乎支持我的结论,即ftplib模块仅支持ASCII文件名.
ftplib应该使用UTF-8而不是latin-1编码吗? http://mail.python.org/pipermail/python-dev/2009-January/085408.html
有关支持Unicode文件名的第三方Python FTP模块的任何建议?我用谷歌搜索了这个问题没有成功[1],[2].
官方Python文档没有提到Unicode文件名[3].
谢谢你,马尔科姆
[1] ftputil包装ftplib并继承了ftplib明显的ASCII支持?
[2] Paramiko的SFTP库确实支持Unicode文件名,但我正在寻找相对于我们当前项目的ftp(与sftp)支持.
[3] http://docs.python.org/library/ftplib.html
解决方法:
encodings.idna.ToASCII和.ToUnicode方法可用于将Unicode路径名转换为ASCII格式.如果使用这些函数包装所有远程路径名和dir/nlst方法的输出,那么您可以创建一种使用标准ftplib保留Unicode路径名的方法(并且还保留不在文件系统上的Unicode文件名)支持Unicode路径).这种技术的缺点是,当引用您上传到服务器的文件时,服务器上的其他进程也必须使用encodings.idna.顺便说一句:我知道这是对encodings.idna库的滥用.
感谢Peter和Bob的评论,我发现这些评论非常有帮助.
我想弄清楚Python中的哪些文件(Python 2.6/Python 2.7)tcl文件夹是必需的,以便使用Py2exe或类似程序分发冻结的Python Tkinter应用程序.
快速而肮脏的方式(使用pyexe作为示例)是按照下一页上的第二个示例,然后将您的python的tcl文件夹xcopy到您的dist文件夹(作为tcl子文件夹). http://www.py2exe.org/index.cgi/TixSetup
xcopy tcl技术的问题在于它复制了100个可能不需要分发的额外文件.
例如,我的实验表明在冻结Python 2.7 Tkinter应用程序时可能不需要以下tcl文件夹:
注意:数字大小是每个路径中所有文件的总和.
我是在正确的道路上还是不包括上面的tcl内容会让我在路上撞到我?
更好的是,有没有关于Python的tcl文件夹中的文件的文档?
谢谢你,马尔科姆
是否有create_text()支持自动换行的模式或技术?我一直在使用create_text()vs. aLabel或Text小部件,因为我将文本放在画布上的图像顶部。
此外,是否有一个 Tkinter API 可以截断不适合特定宽度的文本,例如后缀之类的省略号,例如。Where very, very, very long text被转换为类似Where very, very, ....