我希望我的程序等到特定文件包含文本而不是空字符串。另一個程序將數據寫入文件。當我運行第一個程序時,由於持續檢查文件內容的while循環,我的電腦開始過熱。我能做什麼而不是那個循環?Python等待事件的其他方式
1
A
回答
1
一個更好的解決辦法是從你的Python腳本內啓動過程:
from subprocess import call
retcode = call(['myprocess', 'arg1', 'arg2', 'argN'])
檢查retcode
是零,這意味着成功 - 你的過程中,沒有任何問題成功運行。您也可以使用os.system
而不是subprocess.call
。一旦這個過程完成,你就會知道現在你可以讀取文件。
爲什麼這種方法比監控文件更好?
的過程可能失敗,有可能是文件中沒有輸出你想從閱讀。 在這種情況下,您的進程將一次又一次地檢查文件,查找數據,這會浪費內核I/O操作時間。沒有什麼能夠保證過程在任何時候都能成功。
過程可接收信號,(I,E。
STOP
和CONT
),如果進程收到STOP
信號,內核將停止這一進程,並有可能是什麼,你可以從輸出文件中讀取,特別是如果你打算一次讀取所有的數據,比如當你排序文件時。一旦過程接收到CONT信號,過程將再次開始。基本上,這意味着當進程停止時,您的Python腳本將嘗試從文件中同時讀取。
該方法的缺點是,該進程需要在Python腳本處理文件輸出之前先完成。在subprocess.call
塊中,下一行將不會由Python解釋器執行,直到生成的進程完成第一次,您可以改爲使用非阻塞的subprocess.Popen
。甚至更好,如果可能,將進程的輸出重定向到標準輸出,並使用Popen
從標準輸出中讀取進程的輸出,然後將Python腳本的輸出寫入文件。
相關問題
- 1. 正確的等待方式事件
- 2. Python Pygames等待事件
- 3. 等待事件
- 4. 等待其他進程
- 5. C#等待其他線程
- 6. 使AsyncTask等待其他AsyncTasks
- 7. php文件如何等待其他人?
- 8. 等待在其他請求事件扭曲
- 9. 暫停python並等待Matplotlib事件
- 10. Selenium - 等待事件
- 11. 的HtmlUnit等待onclick事件
- 12. 等待承諾的事件
- 13. 的Win32等待事件(synchroniztion)
- 14. 能夠處理事件的等待方式c#
- 15. 在TestCafe中等待'WebComponentsReady'事件的最佳方式是什麼?
- 16. 量角器:等待自定義事件的最佳方式
- 17. 並行線程無需等待python中的其他線程
- 18. 如何等待在python的其他窗口執行
- 19. 睡眠等待命令塊其他事務
- 20. 在onclick事件中等待FB.logout()事件
- 21. KeyPress事件等待MousePress事件qt
- 22. Unity和Photon Networking - 等待其他玩家
- 23. 等待從空到其他價值
- 24. 等待其他視圖動畫結束
- 25. WFP BackgroundWorker等待其他BackgroundWorker完成
- 26. 等待click事件完成
- 27. 等待用戶事件
- 28. debounceTime(),並等待事件
- 29. 等待事件完成
- 30. 硒事件和等待
你可以編寫一個服務作爲第一個程序。第二個方案將成爲客戶。當客戶端在文件中完成寫入時,它可以向服務發送一些請求以採取必要的操作。 –
不幸的是,我認爲你必須不斷檢查文件內容。一個選項是執行time.sleep命令,以便不燒壞你的cpu或使用cron作業。兩者基本上都是在文件檢查之間等待的相同實現。 – Sebastian
pyinotify監控文件系統 - https://www.saltycrane.com/blog/2010/04/monitoring-filesystem-python-and-pyinotify/?或使用看門狗 - https://pythonhosted.org/watchdog/? –