मैं अजगर से पाठ (विंडोज़) क्लिपबोर्ड से पाठ कैसे पढ़ूं?


92

मैं अजगर से पाठ (विंडोज़) क्लिपबोर्ड से पाठ कैसे पढ़ूं?


3
इस सवाल से संबंधित ।
ग्लॉगल

मेरे मामले में, केवल डैन उत्तर ने काम किया, जो क्लिपबोर्ड पैकेज का उपयोग करता है।
सोएरेना

जवाबों:


103

आपने मॉड्यूल बुलाया का उपयोग कर सकते win32clipboard है, जो का हिस्सा है pywin32

यहाँ एक उदाहरण है जो पहले क्लिपबोर्ड डेटा को सेट करता है फिर इसे प्राप्त करता है:

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

प्रलेखन से एक महत्वपूर्ण अनुस्मारक:

जब विंडो ने क्लिपबोर्ड की जांच करना या बदलना समाप्त कर दिया है, तो क्लीपबोर्ड को कॉल करके क्लिपबोर्ड को बंद करें। यह अन्य विंडो को क्लिपबोर्ड तक पहुंचने में सक्षम बनाता है। क्लोजबोर्ड को कॉल करने के बाद क्लिपबोर्ड पर ऑब्जेक्ट न रखें।


6
क्या आपको पता है कि `विथ कथन का उपयोग करने का कोई तरीका है?
नोरफेल्ट

3
वर्थ नोटिंग, py34, win7 में, SetClipboardText ने EmptyClipboard पर एक पूर्ववर्ती कॉल के बिना काम नहीं किया
CoderTao

यदि आप अधिक जटिल ऑपरेशन करना चाहते हैं, तो यह मॉड्यूल उपयोगी है, उदाहरण के लिए क्लिपबोर्ड से HTML-स्वरूपित सामग्री प्राप्त करना। देखें stackoverflow.com/questions/17298897/...
xji

2
@Norfeldt यदि कोई देशी तरीका नहीं है, तो आप आसानी से अपनी स्वयं की कस्टम ऑब्जेक्ट बना सकते हैं जो "साथ" का समर्थन करती है
एलिजस

38

आप इसे आसानी से बिल्ट-इन मॉड्यूल Tkinter के माध्यम से प्राप्त कर सकते हैं जो मूल रूप से GUI लाइब्रेरी है। यह कोड OS से क्लिपबोर्ड सामग्री प्राप्त करने के लिए एक खाली विजेट बनाता है।

#from tkinter import Tk  # Python 3
from Tkinter import Tk
Tk().clipboard_get()

2
कृपया इस कोड में टिप्पणी जोड़ें, और (संभवतः) खुलासे के लिए लिंक।
जेबी

5
के tkinterबजाय होना चाहिए Tkinter। Othwise यह मेरे अजगर 3.7.3 64 बिट win10 पर काम नहीं किया।
jerik

21

मैंने win32 मॉड्यूल का उपयोग करने के लिए कई सुझाव देखे हैं, लेकिन टिंकर ने सबसे छोटा और सबसे आसान तरीका प्रदान किया है, जैसा कि मैंने इस पोस्ट में देखा है: मैं पायथन का उपयोग करके विंडोज पर क्लिपबोर्ड पर एक स्ट्रिंग की प्रतिलिपि कैसे बना सकता हूं?

इसके अलावा, टीकटर अजगर मानक पुस्तकालय में है।


3
कुछ कोड है कि Tkinter के माध्यम से क्लिपबोर्ड मूल्य प्राप्त होगा: Tkinter आयात टी [\ nl] आर = टी () से [\ nl] परिणाम = r.selection_get (चयन = "क्लिपबोर्ड") [\ nl] r.destroy ()
mgkrebbs

18

यदि आप अतिरिक्त पैकेज स्थापित नहीं करना चाहते हैं, 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())

यह विंडोज 10 पर काम नहीं करता है। यह हमेशा "कोई नहीं" प्रिंट करता है।
अरन-फे

विंडोज 10 ने मेरे लिए ठीक काम किया जब तक कि मैंने पायथन 32-बिट का उपयोग किया। मैंने 64-बिट के साथ भी काम करने का उत्तर अपडेट किया।
किचिक

इस त्रुटि को "अपेक्षित चार्ट पॉइंटर," int "लाइन" टेक्स्ट = ctypes.c_char_p (data_locked) ", किसी भी विचार पर जाएं?
txemsukr

टेक्स्ट को क्लिपबोर्ड पर भी कॉपी करने के लिए समान समाधान देखना बहुत अच्छा होगा।
mrkbutty

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()

11

मुझे पता चला कि यह अजगर से क्लिपबोर्ड तक पहुंचने का सबसे आसान तरीका था:

1) pyperclip स्थापित करें: pip install pyperclip

2) उपयोग:

import pyperclip

s = pyperclip.paste()
pyperclip.copy(s)

# the type of s is string

Win10 64-बिट, पायथन 3.5 और पायथन 3.7.3 (64-बिट) पर परीक्षण किया गया। गैर- ASCII वर्णों के साथ भी काम करने लगता है। परीक्षण किए गए वर्णों में © ° © © α charactersåäö शामिल हैं


यह 3.6 के लिए उपयुक्त है? इसे सफलतापूर्वक स्थापित किया जाता है लेकिन जब पेस्ट () विधि का उपयोग किया जाता है तो यह मुझे त्रुटि देता है: "PySide आयात संस्करण से PYSIDE_VERSION # विश्लेषण के रूप में: ModuleNotFoundError को अनदेखा करें: 'PySide' नाम का कोई भी मॉड्यूल नहीं है"। जब मैंने Pyside स्थापित करने की कोशिश की, तो यह 3.6
गौरव

हाँ, यह पायथन 3.6 पर काम करना चाहिए, और मैंने अभी पायथन 3.7.4 (64-बिट) के साथ परीक्षण किया है। पैकेज के setup.py को देखते हुए इसमें Pyside या किसी अन्य पैकेज के लिए कोई निर्भरता नहीं होनी चाहिए। क्या आप सुनिश्चित हैं कि पेस्ट कमांड Pyside का उपयोग करने की कोशिश कर रहा है?
np8

हाँ, पेस्ट कमांड Pyside की तलाश में है और Pyside केवल अजगर 3.4 का समर्थन करता है, यह त्रुटि देता है
गौरव

7

अजगर मानक पुस्तकालय यह करता है ...

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()


3

मेरे सांत्वना कार्यक्रम के लिए ऊपर के टिंकर के साथ उत्तर मेरे लिए काफी काम नहीं आए क्योंकि डडस्ट्रॉय () ने हमेशा एक त्रुटि दी:

"ईवेंट" कमांड को लागू नहीं कर सकते: निष्पादित करते समय एप्लिकेशन नष्ट हो गया है ...

या .withdraw () का उपयोग करते समय कंसोल विंडो को फ़ोकस वापस नहीं मिला।

इसे हल करने के लिए आपको .destroy () से पहले .update () भी कॉल करना होगा। उदाहरण:

# Python 3
import tkinter

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

R.withdraw () फ्रेम को एक मिलिसेकंड के लिए दिखाने से रोकता है, और फिर यह कंसोल को फ़ोकस वापस देते हुए नष्ट हो जाएगा।


2

पायथन लाइब्रेरी क्लिपबोर्ड का उपयोग करें

इसके बस इस तरह इस्तेमाल किया:

import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()  

8
यह अनिवार्य रूप से pyperclip का उपयोग कर रहा है। इस मॉड्यूल की पूरी स्रोत कोड सचमुच है: from pyperclip import copy, paste
pbreach

1

बहुत सीधी चाल नहीं:

पाइयुतोगुई हॉटकी का उपयोग करें:

Import pyautogui
pyautogui.hotkey('ctrl', 'v')

इसलिए, आप अपनी इच्छानुसार क्लिपबोर्ड डेटा को पेस्ट कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.