Python, pyperclipでクリップボードを操作(コピー、ペースト、監視)

Modified: | Tags: Python

Pythonでクリップボードに文字列(テキスト)をコピーしたりクリップボードから文字列をペースト(取得)したりするには、pyperclipを使う。クリップボードが更新されたときに文字列を取得する監視処理も可能。

import pyperclip

pyperclip.copy('text to be copied')
print(pyperclip.paste())
# text to be copied

ここでは以下の内容について説明する。

なお、pandasではクリップボードの内容をDataFrameとして処理する機能が提供されている。

最後に述べるように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を使うとクリップボードの画像を取得できる。

関連カテゴリー

関連記事