- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在使用 tkinter 组合看门狗模块来处理一些上传请求。大多数时候它工作正常,但有时我们的网络驱动器会不稳定并断开连接一段时间。但是我无法找到捕获此错误的正确位置。
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import tkinter as tk
root = tk.Tk()
path = [r"Network path 1",r"Network path 2"]
class MyGui:
def __init__(self,master):
self.master = master
self.but = tk.Button(master,text="Click to start observer",command=self.start_observer)
self.but.pack()
def start_observer(self):
for i in path:
observer.schedule(event_handler, path=i, recursive=False)
observer.start()
self.but.config(state="disabled",text="observer started")
print ("Observer started")
class MyHandler(FileSystemEventHandler):
def on_created(self, event):
current_file = event.src_path
print (current_file)
event_handler = MyHandler()
observer = Observer()
gui = MyGui(root)
root.mainloop()
这是我让它运行几天后得到的结果:
Exception in thread Thread-4:
Traceback (most recent call last):
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\watchdog\observers\api.py", line 146, in run
self.queue_events(self.timeout)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\watchdog\observers\read_directory_changes.py", line 75, in queue_events
winapi_events = read_events(self._handle, self.watch.is_recursive)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\watchdog\observers\winapi.py", line 346, in read_events
buf, nbytes = read_directory_changes(handle, recursive)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\watchdog\observers\winapi.py", line 306, in read_directory_changes
raise e
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\watchdog\observers\winapi.py", line 302, in read_directory_changes
ctypes.byref(nbytes), None, None)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\site-packages\watchdog\observers\winapi.py", line 107, in _errcheck_bool
raise ctypes.WinError()
OSError: [WinError 64] The specified network name is no longer available.
谁能建议如何正确处理这个异常?
最佳答案
我是这样解决这个问题的:
from watchdog import observers
from watchdog.observers.api import DEFAULT_OBSERVER_TIMEOUT, BaseObserver
class MyEmitter(observers.read_directory_changes.WindowsApiEmitter):
def queue_events(self, timeout):
try:
super().queue_events(timeout)
except OSError as e:
print(e)
connected = False
while not connected:
try:
self.on_thread_start() # need to re-set the directory handle.
connected = True
print('reconnected')
except OSError:
print('attempting to reconnect...')
time.sleep(10)
observer = BaseObserver(emitter_class=MyEmitter, timeout=DEFAULT_OBSERVER_TIMEOUT)
...
子类化 WindowsApiEmitter
以捕获 queue_events
中的异常。为了在重新连接后继续,watchdog 需要重新设置目录句柄,我们可以使用 self.on_thread_start()
来完成。
然后将 MyEmitter
与 BaseObserver
一起使用,我们现在可以处理丢失和重新连接到共享驱动器的连接。
关于python - 处理 Watchdog 的 OSError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54397283/
我正在尝试在 Ubuntu 上运行 Python3,但遇到了一些奇怪的错误。该脚本显然无法找到我已确认存在的文件。 这是错误 Traceback (most recent call last):
我将大量文件写入一个文件夹,没有子目录,但是在写入 280 万个文件后,出现此错误: with open(bottleneck_path, 'w') as save_file: OSError: [E
我已经编写了自己的模块,主要处理 django 站点的文件字段。在弄乱了一些与 mod_wsgi 相关的东西之后(通过更新到 3.3 解决),我让我的代码运行。在所有必要的导入之后,在定义任何类或函数
我有以下代码: except(OSError) as (errno, strerror, filename): print "OSError [%d]: %s at %s" % (errno, str
由于某种原因,在使用 fromtimestamp 构造日期时间时,当我使用小于 -43200(-12 小时)的负数时,我得到一个“OSError [Errno22] Invalid Argument”
在声明 Theano 符号函数时,我得到一个 OSError 和回溯。有趣的是,相同的代码在不同的机器上运行。一台机器配置为使用 GPU,而另一台(有错误)仅配置为 CPU。有其他人经历过这种行为并知
我正在尝试创建一本新词典。 import os import datetime parent_dir = "E:\\" directory = "cali" now = datetime.dateti
我想像这样处理特定的 OSError 代码: try: os.scandir() except OSPermissionError as error: # Only catch er
我正在尝试在我的 Linux Ubuntu 64 位机器上安装 pycryptodomex 和 pycrypto。但是,我一直收到此错误:(提前致谢!) haomin@haomin-R110CS:~$
我有以下要测试的 python 代码: def find_or_make_logfolder(self): if not path.isdir(self.logfolder):
当我尝试将 OCRopus(基于 python 的 OCR 工具)应用于 TIFF 图像时,出现以下 python 错误: Traceback (most recent call last):
我在 Tensorflow 之上使用 Python 和 Keras 来训练我的神经网络。当我从 Ubuntu 16.04 切换到 Windows 10 时,运行以下命令时无法再保存我的模型: file
问题陈述 我正在使用 python3 并尝试 pickle 一个 IntervalTrees 字典,它的重量大约为 2 到 3 GB。这是我的控制台输出: 10:39:25 - project: IN
我一直在寻找一些对某些人来说可能相对愚蠢但对我来说非常有趣的东西! :-) 在 Python 3.3 中,输入和输出错误已与 OSError 合并,因此异常类层次结构发生了变化。内置类 OSError
如果我只是这样做: import lightgbm as lgb 我得到了 python script.py Traceback (most recent call last): File "scri
我有以下代码试图在 Linux 中启动下面的每个“命令”。如果两个命令中的任何一个因任何原因崩溃,该模块会尝试保持每个命令都运行。 #!/usr/bin/env python import subpr
我想执行以下简单的服务器代码: import socket s = socket.socket() # Create a socket object host = socket.get
我正在尝试在带有配置的 Power PC 上运行以下代码: Operating System: Red Hat Enterprise Linux Server 7.6 (Maipo) CPE OS N
当我尝试通过 django 管理界面上传媒体文件时,出现此错误: OSError: [Errno 45] Operation not supported 这是回溯的最后一行: File "/pat
使用 uwsgi 和 nginx 运行 Django 3 python 3.6 应用程序会抛出太多这些!我花了太多时间试图弄清楚,所以欢迎任何帮助。 它们绝对不是客户端断开连接。在网上查找时,我发现了
我是一名优秀的程序员,十分优秀!