2014-03-14 22 views
0

我有一個Python腳本,但我不想更改它。 我想用另一個腳本來修改原來的腳本,並調用運行原始腳本的所有「print」或「time.sleep」語句被註釋掉(不運行)。 我搜索它並找到一種使用AST的方法,但我真的不知道如何使用它。 非常感謝!如何使用AST使特定的語句在Python中註釋掉?

回答

0

您可能可以操縱AST來實現這一目標,但在運行之前可能更容易對其使用的任何對象進行monkeatch處理。在您的具體的例子,可能使人癱瘓printtime.sleep,你可以這樣做:

def insomniac(duration): 
    pass # don't sleep 

_original_sleep = time.sleep 
time.sleep = insomniac 

def dont_write(stuff): 
    pass # don't write 

_original_write = sys.stdout.write 
sys.stdout.write = dont_write 

要獲得功能回來了,你可以設置相關的功能恢復爲存儲的原稿。如果你想更真實地使用你的初衷,使得來自腳本的這些函數的調用無效,但來自其他模塊的調用仍然有效,你可以檢查堆棧以查看調用者所在的模塊,並有選擇地調用原始模塊或忽略呼叫。

+0

對不起,你能詳細解釋一下嗎? 我該如何編寫這些代碼? – user3327884

+0

它看起來像:進口檢驗 進口子 進口AST 進口OS 進口時間 進口SYS 如果__name__ == 「__main__」: 高清失眠症(持續時間): 通#不睡覺 _original_sleep = time.sleep time.sleep =失眠 高清dont_write(東西): 通#不寫 _original_write = sys.stdout.write函數 sys.stdout.write函數= dont_write os.system(「test.py」) exit(0) – user3327884

+0

@ user3327884:否,'os.system'將運行一個單獨的Python進程,其中的更改不會被繼續。你想使用['execfile'](http://docs.python.org/2.7/library/functions.html#execfile)。 – icktoofay

相關問題