2015-12-28 31 views
2

我想將當前腳本作爲Python中變量的字符串獲取。如何在Python中獲取當前腳本的代碼?

我發現了兩個次優方法,但我希望有更好的解決方案。我發現:

  1. inspect進口有getsource方法,但只返回一個函數(或類或其他),而不是整個腳本的代碼。我無法找到將整個腳本的對象傳遞給getsource的方法。

  2. 我可以使用__file__sys.argv[0]open來查找腳本文件的文件位置。但這對我來說似乎太過間接。

那麼:有沒有一種(更好)的方式來訪問整個腳本作爲一個字符串?

如果相關:我更喜歡3.x以上的Python 2.7解決方案。

+1

什麼是你真正想實現* *本? – jonrsharpe

+0

可能dup [這裏](http://stackoverflow.com/questions/18326002/python-script-that-prints-its-source)。 – TigerhawkT3

+0

看起來並不完全一樣,所提供的答案並不真正顯示如何訪問腳本自己的代碼,而是訪問其他腳本的代碼。 – Will

回答

6

嘗試:

import inspect 
import sys 

print inspect.getsource(sys.modules[__name__]) 

甚至:

import inspect 
import sys 

lines = inspect.getsourcelines(sys.modules[__name__])[0] 

for index, line in enumerate(lines): 
    print "{:4d} {}".format(index + 1, line) 

的代碼包含內部被認爲是一個Python 「模塊」,並sys.modules[__name__]返回該模塊的引用文件。

編輯

甚至,作爲@ilent2建議,這樣,而不需要sys模塊:

import inspect 

print inspect.getsource(inspect.getmodule(inspect.currentframe())) 
+1

或者,進口較少,但可讀性較差:'inspect.getsource(inspect.getmodule(inspect.currentframe()))' – ilent2

+0

非常酷的感謝;添加到帖子! – Will

+1

不錯。而已。謝謝! – agtoever

相關問題