在 Ubuntu 桌面中使用 Python 將檔案丟到資源回收桶
假如你在 Ubuntu 使用 Python 進行資料處理,對於一些檔案懷抱著想移出視線又怕刪掉就回不去的情感,怎麼辦? 這篇文章介紹的工具與概念,或許可以提供你一個對於整合桌面環境更加友善的方向。
初始情境
- 我們在用 Python 進行資料處理的時候,會想將不要的檔案移出工作目錄,但又不想要不小心誤刪檔案而救不回來。類似 mv 的操作也會有同名檔案處理起來相對複雜的問題。
- Python 的標準函式庫的檔案相關操作,無法滿足在桌面使用情境下對應的操作需求,以這邊為例就是把檔案丟到資源回收桶。
簡化問題
- 我只是想把檔案丟到資源回收筒
可利用方法
- 我們想要在 GNOME 桌面環境將檔案丟到資源回收桶,有哪些方式呢:
- 使用檔案總管(Nautilus)將檔案拖拉到資源回收桶資料夾
- 透過
gio
對檔案進行操作 - 透過呼叫 Glib 中 Gio 的相關函式對檔案進行操作
- 這邊要介紹的主要是第三種,而第二種為第三種的簡易應用。
甚麼是 Glib、在 Gtk 家族裡的關係?
- GLib 是 GNOME 將原本 gtk 函式庫裡面跟圖形介面無關的底層程式碼獨立出來的一個專案, 它們和其他 gtk 相關專案的關係圖如下:
如何使用 Python 將檔案丟到資源回收桶
- 首先,作業系統環境一定要安裝 GLib 函式庫,Python 套件則是需要安裝 PyGObject
- 若想透過
gio
等 shell 指令直接對 GLib 進行利用,在 Debian/Ubuntu 下需要確認是否有安裝到libglib2-bin
(該類發行版套件會切比較細)
相關程式碼
1 | #!/usr/bin/env python3 |
以上程式碼大致可以對應到 gio trash /path/to/filename
這個指令,若是對應圖形介面操作,就是把 /path/to/filename
丟到資源回收桶,完工
API Reference
這邊直接附上 GLib 的函式庫(1),至於 PyGObject 那一側則還沒找到官方詳細文件,因此先拿它恰巧有出沒過的文件連結(2)替代,若有找到更完整的資料歡迎提供!
- https://lazka.github.io/pgi-docs/Gio-2.0/classes/File.html#Gio.File
- https://pygobject.readthedocs.io/en/latest/guide/threading.html?highlight=Gio.File#asynchronous-operations
應用: send2trash
於是這樣簡潔方便的介面使得 send2trash 這個第三方 Python 套件於 2013 年即開始支援以 Gio 來進行檔案移至資源回收筒的實作方式。是不是相當單純呢?
結語與討論
GLib 除了本文介紹的範例外,也有許多有趣的模組與函式可以讓我們探索與應用,理解其概念,也將對我們開發、協助除錯 GNOME、GTK 相關開源桌面程式有莫大幫助,是個值得一探究竟的專案!