2013-01-18 140 views
0

嘿家伙我编写的东西似乎对我来说真的很奇怪,而且我无法从逻辑上理解如何实现它,而且我觉得如果我这样做会成为cpu融化 - 所以我想我会问真正知道的人。Python while while循环来检查文件是否存在

我想要做的是检查一个文件是否存在,如果没有,执行一个动作,然后再次检查,直到文件存在,然后代码传递。我试过谷歌搜索没有用。感谢任何人的帮助!

+3

请发布您的代码到目前为止 – georg

+2

执行它,因为你认为。你可能会感到惊讶...... –

+0

^^回答了我的问题! :) –

回答

2

为简单起见,我将实现一个小轮询功能,具有安全超时:

def open_file(path_to_file, attempts=0, timeout=5, sleep_int=5): 
    if attempts < timeout and os.path.exists(path_to_file) and os.path.isfile(path_to_file): 
     try: 
      file = open(path_to_file) 
      return file 
     except: 
      # perform an action 
      sleep(sleep_int) 
      open_file(path_to_file, attempts + 1) 

我也考虑使用Python内置polling,因为这将跟踪/报告I/O事件为您的文件描述符

1

假设你在Linux上:

如果你真的想避免任何形式的循环,从而找到该文件是否存在,你就肯定会在某个时候被创建的,你知道的目录它将在哪里创建,您可以使用pynotify跟踪对父目录的更改。它会在出现变化时通知您,您可以检测到它是否是您需要创建的文件。

根据您的需要,它可能比它的价值更麻烦,但在这种情况下,我建议像凯尔的解决方案小投票功能。

+1

我还应该提到,pynotify使用短轮询实现Observer模式。查看[源代码](https://github.com/seb-m/pyinotify/blob/master/python2/pyinotify.py#L1127) – Kyle