这样做的唯一可行办法(如我所知)是作为从民主选举学会内部的一个分过程进行 Python。 这避免了从现任口译中进行的“污染”,因此,方案的实施很可能与独立启动方案一样。 (如果存在问题,检查分处理环境。) 这样,你就可以使用“假肢”的方式操作文字。
p = subprocess.Popen(args=[sys.executable, -m , pdb , scriptname.py , arg1 ],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
这将在夸张的迅速的时候启动。 你们需要掌握一些毫不夸张的指挥,以设置突破点。
o,e = p.communicate( break scriptname.py:lineno )
If this works, o
should be the normal output of the Python interpreter after it sets a breakpoint, and e
should be empty. I d suggest you play around with this and add some checks in your code to ensure whether the breakpoints were properly set.
之后,你可以启动该方案。
p.communicate( continue )
此时此刻,你可能要看一下你们重新植根于其发展信息网的投入、产出和错误。 也许,你需要做这样的事:
while p.returncode is None:
o,e = p.communicate(console.read())
console.write(o)
console.write(e)
You should consider that snippet to be effectively pseudocode, since depending on how exactly your console works, it ll probably take some tinkering to get it right.
如果这似乎过于夸张,你可能利用Avry s pdb
和bdb
模块(I m guessing “Python debugger”和“基本 de”)的特征简化程序。 如何做到这一点的最佳参考是<代码>pdb模块本身的来源代码。 基本上,这些模块的责任分工方式是:bdb
处理“属于”的变迁功能,如设置断点或停止和重新启动执行;pdb
是处理用户互动,即阅读指挥和显示产出的包装。
您的IDE-Integrated debugger认为,调整pdb
的行为是有意义的。 模块以两种方式我认为:
- have it automatically set breakpoints during initialization, without you having to explicity send the textual commands to do so
- make it take input from and send output to your IDE s console
只有这两项改动才能通过分类(<代码>pdb)执行。 Pdb。 您可以设立一个分级,其初始编制者将一个分级名单作为另一个论点:
class MyPDB(pdb.Pdb):
def __init__(self, breakpoints, completekey= tab ,
stdin=None, stdout=None, skip=None):
pdb.Pdb.__init__(self, completekey, stdin, stdout, skip)
self._breakpoints = breakpoints
实际确定破碎点的逻辑位置,是在被夸大者读到其<条码>后。 为实际安装,使用<代码>_break <代码>b Bdb:
def setInitialBreakpoints(self):
_breakpoints = self._breakpoints
self._breakpoints = None # to avoid setting breaks twice
for bp in _breakpoints:
self.set_break(filename=bp.filename, line=bp.line,
temporary=bp.temporary, conditional=bp.conditional,
funcname=bp.funcname)
def setup(self, f, t):
pdb.Pdb.setup(self, f, t)
self.setInitialBreakpoints()
这部法典将规定每个休息点都通过,例如一个名人。 你还可以尝试直接建造<条码>db.Breakpoint<>/条码>,但我不敢肯定,既然<条码>b. Bdb保持了自己关于休息点的信息。
其次,你需要创建新的<代码>main。 采用<代码>pdb的模块方法。 在一定程度上,您可复制<代码>main。 缩略语 (和if name__= __main__
statement of course),但你需要以某种方式加以扩充,以掌握关于你额外休息点的信息。 我所建议的是,把左点写成从民主选举学会获得的临时档案,并将该档案的名称作为第二点:
tmpfilename = ...
# write breakpoint info
p = subprocess.Popen(args=[sys.executable, -m , mypdb , tmpfilename, ...], ...)
# delete the temporary file
之后,请在<条码>上添加如下内容:
def main():
# code excerpted from pdb.main()
...
del sys.argv[0]
# add this
bpfilename = sys.argv[0]
with open(bpfilename) as f:
# read breakpoint info
breakpoints = ...
del sys.argv[0]
# back to excerpt from pdb.main()
sys.path[0] = os.path.dirname(mainpyfile)
pdb = Pdb(breakpoints) # modified
Now you can use your new debugger module just like you would use pdb
, except that you don t have to explicitly send break
commands before the process starts. This has the advantage that you can directly hook the standard input and output of the Python subprocess to your console, if it allows you to do that.