我正在使用WHIFF的自動重新加載功能 http://whiff.sourceforge.net (因此您不得不少次重新啓動HTTP服務器,理想情況是永遠不要)。python windows目錄mtime:如何檢測軟件包目錄中的新文件?
如果將文件添加到軟件包目錄,我有以下代碼來重新加載軟件包模塊「位置」 。它不適用於Windows XP。 我該如何解決它?我認爲問題是當目錄內容更改時,getmtime(dir)不會在Windows上更改 ? 我真的不想比較上次目錄每次我訪問包時 內容的os.listdir(DIR)...
if not do_reload and hasattr(location, "__path__"):
path0 = location.__path__[0]
if os.path.exists(path0):
dir_mtime = int(os.path.getmtime(path0))
if fn_mtime<dir_mtime:
print "dir change: reloading package root", location
do_reload = True
md_mtime = dir_mtime
在代碼中的「fn_mtime」是從記錄的mtime最後(重新)加載。
...添加評論:我想出了以下解決方法,我認爲 可能會工作,但我不關心它太多,因爲它涉及代碼生成。 我動態生成一個代碼片段來加載模塊,如果它失敗 它重新加載後再次嘗試。尚未測試。
GET_MODULE_FUNCTION = """
def f():
import %(parent)s
try:
from %(parent)s import %(child)s
except ImportError:
# one more time...
reload(%(parent)s)
from %(parent)s import %(child)s
return %(child)s
"""
def my_import(partname, parent):
f = None # for pychecker
parentname = parent.__name__
defn = GET_MODULE_FUNCTION % {"parent": parentname, "child": partname}
#pr "executing"
#pr defn
try:
exec(defn) # defines function f()
except SyntaxError:
raise ImportError, "bad function name "+repr(partname)+"?"
partmodule = f()
#pr "got", partmodule
setattr(parent, partname, partmodule)
#pr "setattr", parent, ".", partname, "=", getattr(parent, partname)
return partmodule
其他建議歡迎。我對此不高興......
它看起來不像它。 atime實際上是在*時間之前* os.path。getatime( 「根」) 1247371200.0 >>> os.path.getmtime( 「根」) 1238624574.0 – 2009-07-12 15:15:33
對不起反對,但你的atime比你的mtime年輕: 1247371200.0 - 1238624574.0 = 8746626.0 由於這些是自時代以來的秒,大意味着更年輕,所以atime是_after_mtime。 – ThomasH 2009-07-12 21:05:02
哎呀。不過,當我在目錄中創建文件時,atime不會更改。 – 2009-07-13 00:11:09