python - IronPython - sys.exit() 上的正确资源释放

标签 python ironpython finalize

调用 sys.exit() 时正确完成 python 脚本的最佳方法是什么?

例如,我有一个应用程序: - 打开的日志文件 - 打开一些USB小工具 - 决定是时候关闭应用程序了 - 调用sys.exit(-1) - (或者它抛出严重的异常 - 但我更喜欢第一种方法,因为我有点小 pig ,并且代码的某些部分实际上捕获了所有异常,这将阻止我的终止异常...)

然后我需要一些 Finalize() 函数,该函数在退出解释器之前肯定会被调用。 Finalize() 将释放 USB 小工具并完全按照此顺序关闭日志文件。

我尝试了 def del 但它没有在 sys.exit 上调用,而且我无法决定调用 _del_s 的顺序。

有什么办法可以拯救我吗?或者我必须这样做: 1.最上面的try-catch-finally 2. 执行一些特定异常的退出 3. 每个异常捕获的各处都准确指定了我要捕获的内容?

最佳答案

请参阅 python 的 with 语句。

class UsbWrapper(object):
    def __enter__(self):
        #do something like accessing usb_gadget (& acquire lock on it)
        #usb_gadget_handle = open_usb_gadget("/dev/sdc")
        #return usb_gadget_handle

    def __exit__(self, type, value, traceback):
        #exception handling goes here
        #free the USB(lock) here

with UsbWrapper() as usb_device_handle:
        usb_device_handle.write(data_to_write)

无论代码抛出异常还是按需要运行,USB 锁总是被释放。

关于python - IronPython - sys.exit() 上的正确资源释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9022479/

相关文章:

Java Finalize 方法不调用

python 3 : how to install python3-dev locally?

python - 存储函数过去的结果

python - 如何绘制回归线?

.net - .NET 将如何影响 Python 和 Ruby 应用程序?

python - 当 XPath 验证器返回正确结果时,为什么 XmlNode.SelectNodes 返回空列表?

android - 应用崩溃时如何释放Android资源

java - 我是否会在使用 PhantomReferences 完成时避免使用反射?

python - 如何编写迭代器?

python - SICK 激光扫描仪不以 ROS 启动