2010-11-03 63 views
4

我有一個由幾個模塊Python程序。 「main」模塊創建一個用於記錄輸出的文件變量log_file;所有其他模塊也需要寫入該文件。在python中存儲日誌文件名的地方?

不過,我不希望導入的「主」模塊到另一個模塊,因爲這將是一個非常奇怪的依賴關係(更不用提它甚至可能沒有工作,由於循環依賴)。

哪裏,那麼,我應該存儲log_file變量?

編輯:

繼@pyfunc答案 - 這會是好的:

--- config.py --- 
# does not mention log_file 
# unless it's required for syntax reasons; in which case log_file = None 
# ... 

--- main.py --- 
from datetime import datetime 
import config.py 
log_filename = str(datetime.now()) + '.txt' 
config.log_file = open(log_filename, 'w') 
# ... 

--- another_module.py --- 
import config.py 
# ... 
config.log_file.write(some_stuff) 
+0

似乎不存在任何東西,具體py3k在這個問題上。 – SilentGhost 2010-11-03 19:09:12

+2

我建議使用配置文件而不是自定義解決方案使用日誌包。 – 2010-11-03 19:09:25

+0

我只是打印輸出,而不是錯誤。我想我仍然可以使用日誌包...雖然我覺得這是一個矯枉過正的問題,我只需要將文件打印到文件中。 – max 2010-11-03 19:15:25

回答

2

把「全局」變量,在「設置」模塊。

settings.py

log_file = "/path/to/file" 

main.py

import settings 
import logging 
logging.basicConfig(filename=settings.log_file,level=logging.DEBUG) 

logging.debug("This should go to the log file") 

other_module.py

import logging 
logging.debug("This is a message from another place.") 

雖然logging module可以解決您的眼前的問題和許多人一樣,設置模塊模式除了日誌文件名稱之外,還有很多其他用途。 Django使用它來配置一切。

+0

這就是我在想什麼(在我上面編輯的代碼中config.py)做的,但我需要分配在main.py文件名我想是因爲這取決於時間當腳本調用。 Config.py會被多次導入,所以我不想更改文件名。 – max 2010-11-03 19:38:36

+0

在你的榜樣,LOG_FILE不必是一個全局變量,因爲記錄模塊將接管。但我理解這個想法。 – max 2010-11-09 17:07:11