2010-07-22 51 views

回答

1

你想寫什麼格式的文件?如果你想要的格式與導入的格式完全相同,那並不難 - 但基本上它是通過文件到文件的拷貝完成的。例如,如果有問題的模塊稱爲blah,你可以這樣做:

>>> import shutil 
>>> shutil.copy(blah.__file__, '/tmp/blahblah.pyc') 
+0

是否可以複製模塊,如果該模塊已被加載,但該模塊的文件已被刪除? – 2010-07-23 01:57:36

+0

不起作用? 'import itertools;打印itertools .__ file__'獲取'AttributeError:'模塊'對象沒有屬性'__file__' – 2010-07-23 02:19:53

+0

這隻適用於作爲文件存在的模塊(源代碼或字節代碼);如果文件從來沒有像這樣存在(而只是作爲機器碼存在於動態庫中,或者作爲機器代碼鏈接到Python的可執行文件中),或者在加載後被刪除,則無法創建(或重新創建)基於內存內容「從頭開始」。 – 2010-07-23 05:26:27

0

你的意思是這樣的?

http://www.datamech.com/devan/trypython/trypython.py 

我不認爲這是可能的,因爲這是一個非常有限的環境。
__file__屬性是僞造的,因此不會映射到一個真正的文件

+0

我正在運行我機器控制檯上的repl。加載模塊後,我刪除了模塊的目錄。有沒有辦法去複製模塊的內容,沒有物理文件? – 2010-07-23 02:06:23

+0

@Bobby,不,無法以這種方式從刪除錯誤中恢復。 – 2010-07-23 05:27:02

0

你可以通過獲得一個關於你的模塊對象得到一個開始:

modobject = __import__("modulename") 

不幸的是那些不與pickle。您可能可以遍歷dir(modobject),並獲得一些很好的信息來捕捉錯誤...或者是一個字符串表示dir(modobject)本身你想要什麼?