python windows目录mtime:如何检测程序包目录新文件?
我正在开发一个自动重新加载功能 (因此您必须减少重启HTTP服务器的频率,最好不要重启) 我有以下代码来重新加载包模块“location” 如果将文件添加到包目录中。它在Windows XP上不工作。 我怎样才能修好它?我认为问题在于getmtime(dir)没有 目录内容更改时是否在Windows上更改? 我真的不想将os.listdir(dir)与上一个目录进行比较 每次我访问包时的内容python windows目录mtime:如何检测程序包目录新文件?,python,windows-xp,Python,Windows Xp,我正在开发一个自动重新加载功能 (因此您必须减少重启HTTP服务器的频率,最好不要重启) 我有以下代码来重新加载包模块“location” 如果将文件添加到包目录中。它在Windows XP上不工作。 我怎样才能修好它?我认为问题在于getmtime(dir)没有 目录内容更改时是否在Windows上更改? 我真的不想将os.listdir(dir)与上一个目录进行比较 每次我访问包时的内容 if not do_reload and hasattr(locatio
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
欢迎提出其他建议。我对此不满意…您可以尝试使用getatime()来代替。我不完全理解您的问题
您是在目录或单个文件上调用getmtime()?好久不见。我不确定您到底在做什么,但与您的代码相当:
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
"""
要执行的exec
ed包括:
defn = GET_MODULE_FUNCTION % {"parent": parentname, "child": partname}
exec(defn)
是(per),假设parentname命名一个包,partname命名该包中的一个模块(如果partname是parentname包的顶级名称,如函数或类,则必须在末尾使用getattr):
如果没有exec或任何奇怪的东西,只需适当地将其称为
f
。关于您的第一个代码片段,有两件事与我有关:
- 您将浮点从getmtime强制转换为int。根据此代码的运行频率,您可能会得到不可靠的结果
- 在代码末尾,将dir_mtime分配给变量md_mtime。fn_mtime,您对照检查,似乎没有更新
defn = GET_MODULE_FUNCTION % {"parent": parentname, "child": partname}
exec(defn)
import sys
def f(parentname, partname):
name = '%s.%s' % (parentname, partname)
try:
__import__(name)
except ImportError:
parent = __import__(parentname)
reload(parent)
__import__(name)
return sys.modules[name]