簡體   English   中英

在使用Python解釋器運行腳本之前,如何執行一堆Python命令?

[英]How can I execute a bunch of Python commands before a script is run when using the Python interpreter?

我有一個有缺陷的bzr版本,我使用python -m pdb $(which 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技術,或者我可以通過劫持類似於pdb似乎如何做的腳本以某種方式利用-m <module>選項?

我該怎么辦呢?

請參閱下面的示例。

在faulty.py中:

print 'calling missing_function'
missing_function()

在fixed.py中:

def missing_function():
    print 'missing'
execfile('faulty.py',  {'missing_function' : missing_function})

最簡單的方法是只更改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...

這只是一個粗略的輪廓,因為我實際上對集市一無所知。 希望它有點幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM