在使用Python解释器运行脚本之前,如何执行一堆Python命令?

时间:2014-05-29 02:38:04

标签: python python-2.7 bazaar

我有一个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选项?

我该怎么做呢?

2 个答案:

答案 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...

这只是一个粗略的概述,因为我实际上对集市一无所知。希望它有点帮助。