如何强制os.stat通过相同路径重新读取文件统计信息



我有一个在架构上接近下面发布的代码(不幸的是,我不能发布完整版本,因为它是专有的(。我有一个自我更新的可执行文件,我正在尝试测试这个功能。我们假设在执行input之后,该文件的完整路径将在A.some_path中。我的问题是断言失败了,因为在第二次调用os.stat时仍然返回以前的文件统计信息(我想它认为没有什么可以更改,所以没有必要(。我试着手动启动它,自我更新工作得很好,文件确实在删除和重新创建,统计数据也在变化。是否有任何保证的方法可以强制os.stat通过相同的路径重新读取文件统计信息,或者有其他选项使其工作(除了重新创建A对象(?

from pathlib import Path
import unittest
import os
class A:
some_path = Path()
def __init__(self, _some_path):
self.some_path = Path(_some_path)

def get_path(self):
return self.some_path
class TestKit(unittest.TestCase):
def setUp(self):
pass
def check_body(self, a):
some_path = a.get_path()
modification_time = os.stat(some_path).st_mtime
# Launching self-updating executable
self.assertTrue(modification_time < os.stat(some_path).st_mtime)
def check(self):
a = A(input('Enter the file pathn'))
self.check_body(a)
def Tests():
suite = unittest.TestSuite()
suite.addTest(TestKit('check'))
return suite
def main():
tests_suite = Tests()
unittest.TextTestRunner().run(tests_suite)
if __name__ == "__main__":
main()

我已经找到了问题的根源:我试图通过os.system启动自我更新,等待过程完成。但首先:在自我更新过程中,我们启动了几个分离的进程,实际上应该等待它们全部结束。第二:即使进程结束的信号也不意味着操作系统真的完全重新分配了文件,而且在assertTrue上,我们似乎还没有完成所有的例程。对于我的任务,我只使用了sleep,但正常的解决方案应该分析系统中现有的过程并等待它们完成,或者至少应该有几次等待尝试。

最新更新