首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过相同路径强制os.stat重新读取文件统计信息

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

Stack Overflow用户
提问于 2021-12-01 19:16:08
回答 1查看 20关注 0票数 0

我有一个在架构上与下面发布的代码很接近的代码(不幸的是,我不能发布完整版本,因为它是私有的)。我有一个自我更新的可执行文件,我正在尝试测试这个特性。我们假设在执行input之后,这个文件的完整路径将在A.some_path中。我的问题是断言失败了,因为在第二次调用时,os.stat仍然返回以前的文件统计信息(我想它认为没有什么可以改变,所以它是不必要的)。我试着手动启动它,自我更新工作完全正常,文件真的正在删除并重新创建,状态发生了变化。有没有什么方法可以强制os.stat以相同的路径重新读取文件统计信息,或者使用替代选项使其正常工作(除了重新创建A对象)?

代码语言:javascript
复制
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 path\n'))
        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()
EN

回答 1

Stack Overflow用户

发布于 2021-12-02 06:22:56

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70190011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档