我想寫一些測試python模塊的包裝。 這個包裝模擬一個環境,然後通過execfile啓動其他python模塊。 有很多python模塊需要測試(> 200)。防止調用子模塊的全局變量在不更改submodul本身的情況下進行更改?
這些模塊內部有一些硬編碼的變量,它們包含一些絕對文件路徑,這些文件路徑在我的模擬環境中不存在(我也無法創建它們)。這些文件路徑是選項文件的路徑,該腳本將讀入。每個模塊總是隻有一個選項 - 文件,並且該選項文件的文件路徑始終保存在同一個全局變量中(我的意思是:變量名稱在每個模塊中都是相同的:optionFile)。
optionFile = "Path to Option file"
我的想法是,我也許可以在我執行的測試模塊預先設置這個全局變量「optionFile」與現有的路徑。但是,這當然不會有幫助,因爲執行模塊在執行時會用硬編碼值覆蓋「optionFile」。
我想知道是否有一種方法可以覆蓋globals對象的__setattr__
函數,所以它對某些變量名不會做任何事情,但是我沒有對我的嘗試做出成功。你認爲這可以工作,並有任何建議嗎?
模塊中代碼的性質是什麼?如果它全部位於模塊的頂層,那麼你可能不太好運。也就是說,如果一個文件具有'optionFile =「/ some/path」',然後在下一行執行了'open(optionFile)',那麼你就不能在'optionFile'中修改值之間。你可能會更好地運用「open」函數(或者模塊用來與'optionFile'交互的任何其他函數)。 – BrenBarn
好的解釋:你所描述的正是python模塊的性質:(。 我怎麼能用open-function? ...來實現它,因爲這實際上可以工作,因爲這些選項文件的所有擴展名都是相同(.opt)。如果我打開函數「重新路由」所有以'.opt'結尾的文件到硬編碼版本(我的替換選項文件),這可能會起作用嗎? – and0r
問題似乎不清楚對我而言,標題要求採取各種方法來防止變量被改變,但是主體要求改變變量的方法? – Goyo