打开特定文件时中断python代码

打开特定文件时中断python代码,python,debugging,Python,Debugging,我想在调试器下运行代码,并在打开文件时停止它。我想这样做,不管文件是用什么技术打开的。另外,有两种打开文件的方法(如果有更多方法,那么我也希望在该情况下停止代码),并且我希望在执行其中一种方法时停止代码: with open(filename, "wb") as outFile: 或 这在pdb或ipdb下是否可行 PS:如果我知道可以手动设置断点,我就不知道文件打开的位置。另外,我可以grep打开open(并在找到的行上设置断点,但是如果我的代码使用模块,这可能会有问题。此外,如果文件不是通

我想在调试器下运行代码,并在打开文件时停止它。我想这样做,不管文件是用什么技术打开的。另外,有两种打开文件的方法(如果有更多方法,那么我也希望在该情况下停止代码),并且我希望在执行其中一种方法时停止代码:

with open(filename, "wb") as outFile:

这在
pdb
ipdb
下是否可行


PS:如果我知道可以手动设置断点,我就不知道文件打开的位置。另外,我可以
grep
打开
open(
并在找到的行上设置断点,但是如果我的代码使用模块,这可能会有问题。此外,如果文件不是通过
open
以另一种方式打开的(我不知道这是否可能只是猜测,可能是为了附加等)这是行不通的。

理想情况下,您应该在OpenBuiltin函数中放置一个断点,但这是不可能的。相反,您可以覆盖它,并将断点放置在那里:

import __builtin__

def open(name, mode='', buffer=0):
    return __builtin__.open(name, mode, buffer) # place a BreakPoint here
当然,你会在任何文件打开时被破坏,而不仅仅是你想要的那个

因此,您可以将其细化一点,并放置一个条件断点:

import ipdb
import __builtin__

def open(name, mode='', buffer=0):
    if name == 'myfile.txt':
        ipdb.set_trace()  ######### Break Point ###########
    return __builtin__.open(name, mode, buffer)

f = open('myfile.txt', 'r')

使用
python-m pdb prog.py运行python程序

如果您不知道open调用在哪里,您需要在尽可能早的时间点(例如
\u main\u
-guard)修补原始的
open
,如下所示:

 import __builtin__

 _old_open = open

 def my_open(*args, **kwargs):
     print "my_open"
     return _old_open(*args, **kwargs)

 setattr(__builtin__, 'open', my_open)

 print open(__file__, "rb").read()

我认为你可以在<<代码> > < /Cord>块内放置<代码> PDB<代码>。所以你想标记一个特定的文件,并在这个文件打开时停止调试器?看我的答案!我认为这是一个有趣的问题,但是它没有多个视图。考虑重写标题。还有,“例子”。代码让人困惑。但请确定,我是否正确理解了您的意思?
 import __builtin__

 _old_open = open

 def my_open(*args, **kwargs):
     print "my_open"
     return _old_open(*args, **kwargs)

 setattr(__builtin__, 'open', my_open)

 print open(__file__, "rb").read()