小编cod*_*one的帖子

在Emacs中获取pdb以使用当前virtualenv中的Python进程

我正在使用pdb在emacs中调试一些python代码并获得一些导入问题.依赖项安装在我的一个bespoked virtualenv环境中.

Pdb顽固地使用/ usr/bin/python而不是我的virtualenv中的python进程.

我使用virtualenv.el来支持在emacs中切换环境,并通过后面描述的postactivate挂钩

http://jesselegg.com/archives/2010/03/14/emacs-python-programmers-2-virtualenv-ipython-daemon-mode/

这在运行Mx python-shell时效果很好

>>> import sys
>>> print sys.path 
Run Code Online (Sandbox Code Playgroud)

这指向我所有的virtualenv库,表明python-shell是我的virtualenv.

然而,这与M-相矛盾!哪个python,它给/ usr/bin/python

有谁知道我怎么能告诉Mx pdb从当前活跃的virtualenv采用python进程?

python emacs virtualenv pdb

21
推荐指数
2
解决办法
4080
查看次数

在Python打印中添加日期时间戳

我正在尝试调试我依赖的大型库的行为,它通过其许多源文件使用散布(没有过多的)调试打印语句.麻烦的是,大多数(如果不是全部)这些调试打印语句都不包含日期/时间戳,因此很难将应用程序级别的故障与库代码本身内的故障相关联.

而不是修改怀疑涉及我所看到的故障的所有调试打印的源代码,我认为有可能暂时修补内置的Python打印"功能",以便所有输出都带有前缀时间戳.

由于内置打印不是我正在使用的Python 2.6环境中的函数,我不知道这是否可行.如果有人这样做或使用另一个钩子进入Python获得了类似的结果,那么我将非常感谢你的建议,甚至更好的解决这个问题的代码.

python debugging monkeypatching built-in

14
推荐指数
2
解决办法
7729
查看次数

使用Python代码覆盖工具来理解和修剪大型库的源代码

我的项目针对的是低成本,低资源的嵌入式设备.我依赖于一个相对庞大且庞大的Python代码库,我对其API的使用非常具体.

我希望通过在Ned Batchelder的覆盖范围figleaf等覆盖工具中执行我的测试套件,将这个库的代码恢复到最低限度,然后在各种模块/文件中删除未使用代码的脚本.这不仅有助于理解库的内部结构,还可以使编写任何补丁更容易.Ned实际上是指使用覆盖工具在他的一次在线会谈中"反向工程"复杂的代码.

我对SO社区的问题是,人们是否有以这种方式使用覆盖工具的经验,他们不介意分享?有什么陷阱?是覆盖工具是不错的选择?或者我会更好地投入时间与figleaf

最终游戏是能够基于原始树自动生成库的新源代码树,但仅包括运行nosetests实际使用的代码.

如果有人开发了一个为他们的Python应用程序和库做类似工作的工具,那么获得一个开始开发的基线是非常好的.

希望我的描述对读者有意义......

python code-analysis code-coverage reverse-engineering

8
推荐指数
1
解决办法
1902
查看次数

如何为Windows获取预构建的*debug*版本的Python库(例如Python27_d.dll)

首先,我应该声明我目前的开发环境是Windows 7下的MSYS + mingw-w64 + ActivePython,而且在正常的一天我主要是Linux开发人员.我很高兴获得或编译带有调试符号的Python库版本.

我需要两个32bit和64bit的调试版本中的Python27.dll文件,最好.我希望能够嵌入Python和实现C++ Python扩展,并能够在使用无缝调试工具调用GDB-7.4我已经建立了的MinGW-W64,和WingIDE对事物的纯Python的一面.

大厦的Python 2.7.3从我的MinGW-W64工具链来源证明问题太多-和任何人之前烈焰我想:我承认,这样的环境不支持,但我想我也许能得到这个工作有一些明智的补丁(黑客)和:

make OPT='-g -DMS_WIN32 -DWIN32 -DNDEBUG -D_WINDOWS -DUSE_DL_EXPORT'

我错了......我放弃了posixmodule.c因为我的变化的影响变得不确定; 因人而异.

我尝试使用Visual C++ 2010 Express构建,但主要是Linux开发人员,文化冲击对我来说太过分了.Python项目甚至没有成功导入.显然,我需要Visual C++ 2008,但我已经确信如果可能的话我不想走这条路......

我真的很惊讶,没有一个zip文件在互联网上的某个地方提供必要的.dll.ActiveState应该真正提供这些作为他们制作的每个ActivePython版本的可选下载 - 也许就是付费支持的来源;-).

在我的环境下获取Python调试库文件的最佳方法是什么?

python gdb debug-symbols activepython mingw-w64

8
推荐指数
2
解决办法
1万
查看次数

鼻子测试弃用警告

对于由我的代码导入的第 3 方模块,我收到了来自 nosetest 的弃用警告。

有谁知道如何使这些警告静音?

我知道以下标志适用于相同代码的任意 python 运行:

 python -W ignore::DeprecationWarning
Run Code Online (Sandbox Code Playgroud)

但是,调用鼻子测试似乎并没有为我提供类似的标志来防止警告出现在测试报告中。

python unit-testing deprecated suppress-warnings

5
推荐指数
1
解决办法
1733
查看次数

将二进制数据写入稀疏文件的中间

我需要编译一个二进制文件,其中各个部分以随机顺序到达(是的,它是一个P2P项目)

def write(filename, offset, data) 
    file.open(filename, "ab")
    file.seek(offset) 
    file.write(data) 
    file.close()
Run Code Online (Sandbox Code Playgroud)

假设我在偏移1MB的文件中写入了32KB(f,o,d),然后在偏移0处写入了另外32KB的写入(f,o,d)

我最终得到一个65KB长的文件(即在32KB到1MB之间由0组成的间隙被截断/消失)

我知道这可能看起来是一个令人难以置信的愚蠢问题,但我似乎无法从file.open(..)模式中弄明白

建议感激不尽.

***更新

我编写P2P片段的方法最终如下(对于那些可能从中收集一些价值的人)

def writePiece(self, filename, pieceindex, bytes, ipsrc, ipdst, ts): 
    file = open(filename,"r+b")
    if not self.piecemap[ipdst].has_key(pieceindex):
        little = struct.pack('<'+'B'*len(bytes), *bytes) 
        # Seek to offset based on piece index 
        file.seek(pieceindex * self.piecesize)
        file.write(little)
        file.flush()
        self.procLog.info("Wrote (%d) bytes of piece (%d) to %s" % (len(bytes), pieceindex, filename))

    # Remember we have this piece now in case duplicates arrive 
    self.piecemap[ipdst][pieceindex] = True
    file.close()
Run Code Online (Sandbox Code Playgroud)

注意:我还使用struct.pack解决了一些困扰我一段时间的endian问题.

对于任何想知道的人来说,我正在研究的项目是分析直接从线路上捕获的BT消息.

python binary file-io p2p sparse-matrix

4
推荐指数
1
解决办法
4782
查看次数

让vc-diff在Emacs 23.2中使用ediff

如果这在Emacs 23.1.x中运行良好,但似乎已经打破了向Emacs 23.2的转变

我想在将文件的工作副本与SVN HEAD进行比较时使用ediff.

通常我按Cx v =和ediff运行,因为我的.emacs中有以下配置

;; Use ediff and not diff 
(setq diff-command "ediff")
Run Code Online (Sandbox Code Playgroud)

但是,唉,我仍然会出现正常的vc-diff缓冲区而没有ediff会话......

有没有其他人遇到这个,知道可能是什么问题?

emacs version-control diff

4
推荐指数
3
解决办法
5317
查看次数

有人可以解释这个elisp regexp

有些人可以解释下面的regexp,我在ediff-trees.el中找到它作为从比较过程中排除哪些文件/目录的规范.

"\\`\\(\\.?#.*\\|.*,v\\|.*~\\|\\.svn\\|CVS\\|_darcs\\)\\'"
Run Code Online (Sandbox Code Playgroud)

虽然我对正则表达式有些熟悉,但遇到这个基于字符串的elisp变种已经让我失望了.

regex emacs elisp

3
推荐指数
1
解决办法
374
查看次数

在多线程应用程序中记录锁获取和释放调用

我正在尝试调试使用各种锁的多线程Python应用程序.

而不是在整个镜头中放置log.debug(...)语句来跟踪获取和释放锁的位置和时间,我的想法是装饰方法threading.Lock.acquire()threading.Lock.release(),并使用以下内容为其调用添加前缀:

log.debug("lock::acquire() [%s.%s.%s]" %
          (currentThread().getName(),
           self.__class__.__name__,
           sys._getframe().f_code.co_name))
Run Code Online (Sandbox Code Playgroud)

其中log是一些全局日志记录对象 - 为了讨论.

理想情况下,日志条目中的名称"lock"应该在运行时派生,这样无论在日志上调用这些方法的哪个锁定对象都将输出其名称,操作装饰,当前线程,类和函数,其中调用操作(获取|释放).

免责声明:我承认上面给出的代码对于任何这样的装饰器实现都是不够的.它仅用于提供我认为可以实现的内容.

有没有人知道我是否可以装饰标准库方法,而无需修改线程库的原始源代码,即从我的调用应用程序代码中查找?

也许我正在咆哮错误的树,有一种更好的方法来实现相同的目的,而不使用装饰器?如果情况确实如此,请提前感谢任何指导.

解决方案:(灵感来自lazyr)

以下代码记录了锁定操作,并给出了调用锁定操作的方法/函数的名称(我还调整了代码以使用条件及其附加的wait()notify()方法):

# Class to wrap Lock and simplify logging of lock usage
class LogLock(object):
    """
    Wraps a standard Lock, so that attempts to use the
    lock according to its API are logged for debugging purposes

    """
    def __init__(self, name, log):
        self.name = str(name) …
Run Code Online (Sandbox Code Playgroud)

python debugging multithreading decorator locks

2
推荐指数
1
解决办法
3796
查看次数