Python, pyperclipでクリップボードを操作(コピー、ペースト、監視)
Pythonでクリップボードに文字列(テキスト)をコピーしたりクリップボードから文字列をペースト(取得)したりするには、pyperclipを使う。クリップボードが更新されたときに文字列を取得する監視処理も可能。
- pyperclip · PyPI
- asweigart/pyperclip: Python module for cross-platform clipboard functions.
- Welcome to Pyperclip’s documentation! — Pyperclip 1.5 documentation
import pyperclip
pyperclip.copy('text to be copied')
print(pyperclip.paste())
# text to be copied
ここでは以下の内容について説明する。
なお、pandasではクリップボードの内容をDataFrame
として処理する機能が提供されている。
- 関連記事: pandasでクリップボードの中身をDataFrameとして取得するread_clipboard
- 関連記事: pandas.DataFrameをクリップボードにコピーするto_clipboard
最後に述べるようにpyperclipが扱えるのは文字列(テキスト)のみだが、Pillowを使うとクリップボードの画像を取得可能。
なお、以下の内容はpyperclipバージョン1.8.2
で確認している。バージョンによっては動作が異なる可能性があるので注意。
pyperclipのインストール
pyperclipはpip
(環境によってはpip3
)コマンドでインストールできる。
$ pip install pyperclip
Linuxの場合はxclip
またはxsel
コマンド(apt
などでインストール)、および、gtk
またはPyQt4
モジュール(pip
でインストール)が必要。詳細は公式ドキュメントを参照。
クリップボードに文字列をコピー: pyperclip.copy()
pyperclip.copy()
でクリップボードに文字列をコピーできる。
pyperclip.copy('text to be copied')
クリップボードの文字列をペースト(取得): pyperclip.paste()
pyperclip.paste()
でクリップボードの文字列をペースト(取得)できる。
pyperclip.copy('text to be copied')
print(pyperclip.paste())
# text to be copied
print(type(pyperclip.paste()))
# <class 'str'>
もちろん、変数に代入することも可能。
s = pyperclip.paste()
print(s)
# text to be copied
クリップボードを監視
pyperclip.waitForPaste()
, pyperclip.waitForNewPaste()
でクリップボードを監視できる。
pyperclip.waitForPaste()
pyperclip.waitForPaste()
を実行するとクリップボードの中身が空の場合は待機状態になり、新しいテキストがコピーされるとそれを返す。
以下の例では待機状態でsome text
というテキストをクリップボードにコピーしている。
pyperclip.copy('')
print(pyperclip.waitForPaste())
# some text
既に何らかのテキストがコピーされた状態で実行すると、そのテキストがそのまま返される。
pyperclip.copy('original text')
print(pyperclip.waitForPaste())
# original text
pyperclip.waitForNewPaste()
pyperclip.waitForNewPaste()
を実行すると待機状態になり、新しいテキストがコピーされる(= クリップボードのテキストが変更される)とそれを返す。
以下の例では待機状態でnew text
というテキストをクリップボードにコピーしている。
pyperclip.copy('original text')
print(pyperclip.waitForNewPaste())
# new text
待機時間を指定
どちらの関数も引数に待機時間を指定できる(単位は秒)。指定した秒数を過ぎると例外(PyperclipTimeoutException
)が送出される。
# pyperclip.waitForNewPaste(5)
# PyperclipTimeoutException: waitForNewPaste() timed out after 5 seconds.
例外処理の例は以下の通り。
try:
s = pyperclip.waitForNewPaste(5)
except pyperclip.PyperclipTimeoutException:
s = 'No change'
print(s)
# No change
注意点: pyperclip.paste()は常に文字列を返す
pyperclip.copy()
で数値をコピーしても、pyperclip.paste()
が返すのは文字列str
。
pyperclip.copy(100)
print(pyperclip.paste())
# 100
print(type(pyperclip.paste()))
# <class 'str'>
文字列を数値に変換するにはint()
やfloat()
を使う。
i = int(pyperclip.paste())
print(i)
# 100
print(type(i))
# <class 'int'>
また、クリップボードに画像がコピーされている場合、pyperclip.paste()
は空文字列''
を返す。Pillowを使うとクリップボードの画像を取得できる。