পাইথন থেকে উইন্ডোজ ক্লিপবোর্ডের পাঠ্যটি কীভাবে পড়ব?


97

পাইথন থেকে উইন্ডোজ ক্লিপবোর্ডের পাঠ্যটি কীভাবে পড়ব?


4
এই প্রশ্নের সাথে সম্পর্কিত ।
glglgl

আমার ক্ষেত্রে, ড্যান উত্তরটি কাজ করেছে, যা ক্লিপবোর্ড প্যাকেজ ব্যবহার করে ।
সুরেনা

উত্তর:


106

আপনি উইন 32 ক্লিপবোর্ড নামে মডিউলটি ব্যবহার করতে পারেন যা পাইউইন 32 এর অংশ ।

এখানে একটি উদাহরণ যা প্রথমে ক্লিপবোর্ডের ডেটা সেট করে তারপরে তা পায়:

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
আপনি কি জানেন যে `উইথ স্টেটমেন্টটি ব্যবহার করার কোনও উপায় আছে কিনা?
নরফেল্ড

4
মূল্যবান, পাই 34, উইন 7-এ, সেটকলিপটেক্সট এমপিটি ক্লিপবোর্ডে পূর্ববর্তী কল ছাড়া কাজ করেনি
কোডার টাও

আপনি আরও জটিল ক্রিয়াকলাপ সম্পাদনা করতে চাইলে এই মডিউলটি কার্যকর, যেমন ক্লিপবোর্ডের বাইরে এইচটিএমএল-ফর্ম্যাট করা সামগ্রী। দেখুন stackoverflow.com/questions/17298897/...
xji

4
@ নরফেল্ট যদি কোনও নেটিভ উপায় না থাকে তবে আপনি সহজেই আপনার নিজস্ব কাস্টম অবজেক্ট তৈরি করতে পারেন যা "সহ" সমর্থন করে
এলিজাস দাপাসাউস্কাস

42

আপনি সহজেই বিল্ট-ইন মডিউল টিনকিটারের মাধ্যমে এটি সম্পন্ন করতে পারবেন যা মূলত একটি জিইউআই লাইব্রেরি। এই কোডটি ওএস থেকে ক্লিপবোর্ড সামগ্রী পেতে একটি ফাঁকা উইজেট তৈরি করে।

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

4
দয়া করে এই কোডটিতে মন্তব্য যুক্ত করুন, এবং (সম্ভবত) ডকুমেন্টেশন প্রকাশের লিঙ্কগুলি।
জেবি।

7
tkinterপরিবর্তে হওয়া উচিত Tkinter। পাশাপাশি এটি আমার অজগর 3.7.3 64 বিট উইন 10 এ কাজ করে নি।
জেরিক

21

আমি উইন 32 মডিউলটি ব্যবহার করার জন্য অনেক পরামর্শ দেখেছি, তবে এই পোস্টে যেমন টিন্টার আমি দেখেছেন তার সবচেয়ে সংক্ষিপ্ততম এবং সহজ পদ্ধতিটি সরবরাহ করে: উইন্ডোজের ক্লিপবোর্ডে পাইথন ব্যবহার করে আমি একটি স্ট্রিং কীভাবে অনুলিপি করব?

প্লাস, টিকিনটার পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে রয়েছে।


4
টিন্টেটারের মাধ্যমে ক্লিপবোর্ডের মানটি পাবেন এমন কিছু কোড: টিকিটার থেকে আমদানি করুন [\ nl] r = টাকা () [\ 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-বিট দিয়ে কাজ করার জন্য।
কিচিক

এই ত্রুটিটি "টেক্সট = সিটি টাইপস.সি.আর_পি (ডেটা_লকড)" লাইনে "প্রত্যাশিত চর পয়েন্টার, ইনট" পেয়েছেন, কোনও ধারণা?
txMSukr

4
ক্লিপবোর্ডেও টেক্সট অনুলিপি করার অনুরূপ সমাধানটি দেখতে পারা দুর্দান্ত হবে।
mrkbutty

18

আমি খুঁজে পাই যে পাইথন থেকে ক্লিপবোর্ডে অ্যাক্সেস পাওয়ার সবচেয়ে সহজ উপায়:

1) পাইপক্র্লিপ ইনস্টল করুন: pip install pyperclip

2) ব্যবহার:

import pyperclip

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

# the type of s is string

উইন 10 64-বিট, পাইথন 3.5 এবং পাইথন 3.7.3 (-৪-বিট) পরীক্ষিত। অ-এসসিআইআই অক্ষরগুলির সাথেও কাজ করে বলে মনে হচ্ছে। পরীক্ষিত অক্ষরগুলির মধ্যে ± ° ©© αβγθΔΨΦåäö অন্তর্ভুক্ত αβγθΔΨΦåäö


এটি 3.6 জন্য উপযুক্ত? এটি সফলভাবে ইনস্টল করা হয়েছে তবে পেস্ট () পদ্ধতিটি ব্যবহার করার সময় এটি আমাকে ত্রুটি দেয়: "পাইসাইড আমদানি সংস্করণ থেকে পিওয়াইএসআইডি_ভিভারশন # বিশ্লেষণ: মডিউল নটফাউন্ড এরিয়ার উপেক্ষা করুন: 'পাইসাইড' নামে কোনও মডিউল নেই"। যখন আমি Pyside ইনস্টল এটা বলে এটা 3.6 সমর্থিত নয় চেষ্টা
গৌরব

হ্যাঁ এটি পাইথন 3.6 এ কাজ করা উচিত এবং আমি পাইথন 3.7.4 (64-বিট) দিয়ে পরীক্ষা করেছি। খুঁজছি setup.py প্যাকেজের এটা Pyside বা অন্য কোন প্যাকেজে কোনো নির্ভরতা থাকা উচিত। আপনি কি নিশ্চিত যে পেস্ট কমান্ডটি পাইসাইড ব্যবহারের চেষ্টা করছে?
এনপি 8

হ্যাঁ, পেস্ট কমান্ড পাইসাইড খুঁজছে এবং পাইসাইড কেবল অজগর 3.4 পর্যন্ত সমর্থন করে এটি ত্রুটি দেয়
গৌরব

পাইথন 3.6 দিয়ে ডাব্লুএসএল-এর এটি সর্বাধিক সহজ সমাধান বলে মনে হচ্ছে
লিখেছিল

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

8

পাইথন স্ট্যান্ডার্ড লাইব্রেরি এটি করে ...

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

4

পাইথনস লাইব্রেরি ক্লিপবোর্ড ব্যবহার করুন

এটি কেবল এর মতো ব্যবহৃত হয়:

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

9
এটি মূলত পাইপারক্লিপ ব্যবহার করছে। এই মডিউলের সমগ্র সোর্স কোড আক্ষরিক হল: from pyperclip import copy, paste
প্রব্রিচ

এটা সত্যি. তবে তারা ঠিক যে clipboardএটি একটি ভাল নাম। পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে এই ফাংশনটি অন্তর্ভুক্ত করা উচিত।
ভিনসেঞ্জুও

3

উইন 32 সমস্ত প্যাকেজ থেকে উইন 32 ক্লিপবোর্ড ব্যবহার করে দেখুন (এটি যদি আপনি অ্যাক্টিভেট স্টাইথে থাকেন তবে সম্ভবত এটি ইনস্টল করা আছে)।

নমুনাটি এখানে দেখুন: http://code.activestate.com/recips/474121/


3

আমার কনসোল প্রোগ্রামের জন্য উপরের টিন্টারের সাথে উত্তরগুলি আমার পক্ষে যথেষ্ট কার্যকর হয়নি কারণ .ডাস্ট্রয়ে () সর্বদা ত্রুটি দেয় ,:

"ইভেন্ট" কমান্ডটি প্রার্থনা করতে পারে না: কার্যকর করার সময় অ্যাপ্লিকেশনটি ধ্বংস হয়ে গেছে ...

অথবা .withdraw () ব্যবহার করার সময় কনসোল উইন্ডোটি ফোকাসটি ফিরে পেল না।

এটি সমাধান করার জন্য আপনাকে .destroy () এর আগে .update () কল করতে হবে। উদাহরণ:

# Python 3
import tkinter

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

R.withdraw () ফ্রেমটি এক মিলিসেকেন্ডের জন্য প্রদর্শন করতে বাধা দেয় এবং তারপরে এটি কনসোলে ফোকাসটি ফিরিয়ে দেওয়া ধ্বংস হয়ে যাবে।


1

খুব সরাসরি কৌশল নয়:

পিয়াটোগুই হটকি ব্যবহার করুন:

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

অতএব, আপনি নিজের পছন্দ মতো ক্লিপবোর্ডের ডেটা পেস্ট করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.