我有一个bzr
的有缺陷的版本,我使用python -m pdb $(which bzr) ...
调用该版本以找出缺陷是什么。
缺陷在某个模块中,我想通过在python
二进制文件开始解释$(which bzr)
的内容之前执行命令来解决缺陷(当然这是一个Python脚本本身。)
在脚本执行之前是否有办法走私代码?即好像我的代码中的走私是在所述脚本文件的顶部......
这里的要点是我希望能够使用解决方法而无法写入bzr
"二进制文件"有问题(非 - root
)。
注意:请不对文字进行以下比较。 bzr
模块的问题是不是缺少的功能。问题更加微妙,需要重新加载sys
以及其他一些东西。
就Bash而言,想象一下错误的剧本:
#!/bin/bash
missing_function TEST
该函数不存在,因此调用该脚本会产生:
$ ./faulty.sh
./faulty.sh: line 2: missing_function: command not found
但是,如果我想偷偷摸摸,我可以滥用source
或在替代文件fixed.sh
中声明这样的功能:
#!/bin/bash
function missing_function
{
echo "$@"
}
source ./faulty.sh
执行此操作会产生更有意义的结果:
$ ./fixed.sh
TEST
是否有类似的Python技术,或者我可以通过劫持类似于-m <module>
似乎如何做的脚本来某种方式利用pdb
选项?
我该怎么做呢?
答案 0 :(得分:2)
请参阅下面的示例。
在faulty.py中:
print 'calling missing_function'
missing_function()
在fixed.py中:
def missing_function():
print 'missing'
execfile('faulty.py', {'missing_function' : missing_function})
答案 1 :(得分:0)
最简单的方法是只更改bzr
模块,但是你必须记住升级时所做的更改,这是一件非常糟糕的事情。
我能想到的第二个最简单的事情就是编写一个脚本来设置市场需要的环境,然后调用bzr
入口点的任何函数。你可以称之为“mybzr.py”。并通过调用python -m mybzr
mybzr.py的骨架内容:
if __name__ == '__main__':
# Do whatever stuff you wanted to do to change bazaar's environment.
# You might need to alter sys.path so that you can `import bzr`.
import bzr
bzr.main() # I don't actually know what the function is called...
这只是一个粗略的概述,因为我实际上对集市一无所知。希望它有点帮助。