2013-01-18 133 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