126

Pythonで(Windows)クリップボードからテキストを読み取るにはどうすればよいですか?

4

15 に答える 15

126

pywin32の一部であるwin32clipboardというモジュールを使用できます。

最初にクリップボード データを設定してから取得する例を次に示します。

import win32clipboard

# set clipboard data
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText('testing 123')
win32clipboard.CloseClipboard()

# get clipboard data
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
print data

ドキュメントからの重要なリマインダー:

ウィンドウがクリップボードの検査または変更を終了したら、CloseClipboard を呼び出してクリップボードを閉じます。これにより、他のウィンドウがクリップボードにアクセスできるようになります。CloseClipboard を呼び出した後、オブジェクトをクリップボードに配置しないでください。

于 2008-09-19T11:20:29.610 に答える
63

これは、基本的に GUI ライブラリである組み込みモジュールTkinterを介して簡単に実行できます。このコードは、OS からクリップボードの内容を取得するための空のウィジェットを作成します。

from tkinter import Tk  # Python 3
#from Tkinter import Tk # for Python 2.x
Tk().clipboard_get()
于 2014-05-24T11:58:36.800 に答える
42

Python からクリップボードにアクセスするには、pyperclipが最も簡単な方法であることがわかりました。

  1. パイパークリップをインストールします。 pip install pyperclip

  2. 使用法:

import pyperclip
    
s = pyperclip.paste()
pyperclip.copy(s)
    
# the type of s is string

Windows、Linux、Mac をサポートし、非 ASCII 文字でも動作するようです。テスト済みの文字には、±°©©αβγθΔΨΦåäö が含まれます

于 2016-07-03T15:54:43.620 に答える
23

win32 モジュールを使用するための多くの提案を見てきましたが、Tkinter は、この記事のように、私が見た中で最も短くて簡単な方法を提供しています。

さらに、Tkinter は python 標準ライブラリに含まれています。

于 2011-11-07T16:27:31.317 に答える
21

余分なパッケージをインストールしたくない場合はctypes、仕事を終わらせることもできます。

import ctypes

CF_TEXT = 1

kernel32 = ctypes.windll.kernel32
kernel32.GlobalLock.argtypes = [ctypes.c_void_p]
kernel32.GlobalLock.restype = ctypes.c_void_p
kernel32.GlobalUnlock.argtypes = [ctypes.c_void_p]
user32 = ctypes.windll.user32
user32.GetClipboardData.restype = ctypes.c_void_p

def get_clipboard_text():
    user32.OpenClipboard(0)
    try:
        if user32.IsClipboardFormatAvailable(CF_TEXT):
            data = user32.GetClipboardData(CF_TEXT)
            data_locked = kernel32.GlobalLock(data)
            text = ctypes.c_char_p(data_locked)
            value = text.value
            kernel32.GlobalUnlock(data_locked)
            return value
    finally:
        user32.CloseClipboard()

print(get_clipboard_text())
于 2014-04-25T05:54:12.243 に答える
11

上記の最も賛成された答えは、クリップボードをクリアしてからコンテンツを取得するという点で奇妙です(その後は空になります)。クリップボードをクリアして、「フォーマットされたテキスト」などのクリップボードコンテンツタイプが、クリップボードに保存するプレーンテキストコンテンツを「カバー」しないようにすることができます。

次のコードは、クリップボードのすべての改行をスペースに置き換えてから、すべての二重スペースを削除し、最後にコンテンツをクリップボードに保存します。

import win32clipboard

win32clipboard.OpenClipboard()
c = win32clipboard.GetClipboardData()
win32clipboard.EmptyClipboard()
c = c.replace('\n', ' ')
c = c.replace('\r', ' ')
while c.find('  ') != -1:
    c = c.replace('  ', ' ')
win32clipboard.SetClipboardText(c)
win32clipboard.CloseClipboard()
于 2012-06-19T08:00:02.703 に答える
10

Python標準ライブラリがそれを行います...

try:
    # Python3
    import tkinter as tk
except ImportError:
    # Python2
    import Tkinter as tk

def getClipboardText():
    root = tk.Tk()
    # keep the window from showing
    root.withdraw()
    return root.clipboard_get()
于 2018-04-04T08:42:51.753 に答える
4

Pythons ライブラリのクリップボードを使用する

次のように単純に使用されます。

import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()  
于 2016-04-27T10:19:44.400 に答える
3

win32allパッケージのwin32clipboardを試してください(ActiveState Pythonを使用している場合はおそらくインストールされています)。

こちらのサンプルをご覧ください:http://code.activestate.com/recipes/474121/

于 2008-09-19T11:15:07.907 に答える
3

私のコンソール プログラムでは、.destroy() で常にエラーが発生したため、上記の tkinter を使用した回答はうまくいきませんでした。

「イベント」コマンドを呼び出せません: 実行中にアプリケーションが破棄されました...

または .withdraw() を使用すると、コンソール ウィンドウにフォーカスが戻りませんでした。

これを解決するには、.destroy() の前に .update() を呼び出す必要があります。例:

# Python 3
import tkinter

r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()

r.withdraw() は、フレームがミリ秒間表示されないようにし、その後破棄されて、コンソールにフォーカスが戻ります。

于 2015-01-17T01:08:26.063 に答える
0

Anaconda のユーザー向け: ディストリビューションには pyperclip は付属していませんが、pyperclip を再配布する pandas が付属しています:

>>> from pandas.io.clipboard import clipboard_get, clipboard_set
>>> clipboard_get()
'from pandas.io.clipboard import clipboard_get, clipboard_set'
>>> clipboard_set("Hello clipboard!")
>>> clipboard_get()
'Hello clipboard!'

これは、pywin32 (ディストリビューションにも含まれています) よりも使いやすいと思います。

于 2021-12-06T16:14:31.760 に答える