Last Updated on 2021-10-19 by Clay
如果我們想要透過 Python 來撰寫一個腳本,來取得系統剪貼簿的內容或設置一段文字給系統剪貼簿,我們該如何做到呢?撇開使用各式各樣不同的套件不談,其實我們可以使用 subprocess 這一內建的 Python 模組來完成。
什麼是系統剪貼簿?
系統剪貼簿(system clipboard)是一個非常方便的東西,讓使用者可以在不同的軟體、網頁上透過複製(copy)貼上(paste)來交換資訊,可說是現代人最離不開的電腦功能之一。
當然,除了文字能夠複製貼上外,當然我們也能夠存取圖片。不過在本文中,為求簡單清楚地範例,就只處理了文字內容。
範例程式碼
不同的作業系統所支援的剪貼簿處理套件並不相同,在 Linux 中我們可以使用 xclip 來做到存取系統剪貼簿的功能。
以下為 xclip
參數說明:
-selection
: 由於系統剪貼簿存在複數個,所以我們需要選擇要使用的 clipboard。(對了,千萬不要使用過時的 Cut Buffers)
-o
: 從選擇的剪貼簿中讀取
Linux 版本
# coding: utf-8
import subprocess
def get_clipboard_data():
p = subprocess.Popen(["xclip", "-selection", "clipboard", "-o"], stdout=subprocess.PIPE)
retcode = p.wait()
data = p.stdout.read()
return data
def set_clipboard_data(data):
data = bytes(data, "utf-8")
p = subprocess.Popen(["xclip", "-selection", "clipboard"], stdin=subprocess.PIPE)
p.stdin.write(data)
p.stdin.close()
retcode = p.wait()
if __name__ == "__main__":
# our string data
data = "Today is a nice day!"
# Set the data
set_clipboard_data(data)
# Get the new data
new_data = get_clipboard_data()
# Print it out
print(new_data)
Output:
b'This is a nice day!'
Mac OS
# coding: utf-8
import subprocess
def get_clipboard_data():
p = subprocess.Popen(["pbpaste"], stdout=subprocess.PIPE)
retcode = p.wait()
data = p.stdout.read()
return data
def set_clipboard_data(data):
data = bytes(data, "utf-8")
p = subprocess.Popen(["pbcopy"], stdin=subprocess.PIPE)
p.stdin.write(data)
p.stdin.close()
retcode = p.wait()
if __name__ == "__main__":
# our string data
data = "Today is a nice day!"
# Set the data
set_clipboard_data(data)
# Get the new data
new_data = get_clipboard_data()
# Print it out
print(new_data)
Output:
b'This is a nice day!'