পাইথন ব্যবহার করে আমি উইন্ডোজ ক্লিপবোর্ডে একটি স্ট্রিং কীভাবে অনুলিপি করব?


193

আমি একটি বেসিক উইন্ডোজ অ্যাপ্লিকেশন তৈরি করার চেষ্টা করছি যা ব্যবহারকারীর ইনপুট থেকে একটি স্ট্রিং তৈরি করে এবং পরে এটি ক্লিপবোর্ডে যুক্ত করে। আমি পাইথন ব্যবহার করে ক্লিপবোর্ডে স্ট্রিংটি কীভাবে অনুলিপি করব?


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

jaraco.clipboard এটি করে (খুব): ক্লিপবোর্ডকপি (ভেরিয়েবল)
জিনস্নো

উইন্ডো না দেখিয়ে টিনকটার ব্যবহার করে ক্লিপবোর্ডে অনুলিপি করা সম্পর্কিত সম্পর্কিত প্রশ্নের আমার উত্তরও দেখুন । এটিতে পাইথন ফাংশন অন্তর্ভুক্ত রয়েছে যা টিনেটার ব্যবহার করে ক্লিপবোর্ডের পাঠ্যকে প্রতিস্থাপন / ফিরিয়ে দেয়।
এডওয়ার্ড

উত্তর:


285

আসলে, pywin32এবং ctypesএই সাধারণ কাজের জন্য এটি একটি ওভারকিল বলে মনে হচ্ছে। Tkinterএকটি ক্রস-প্ল্যাটফর্ম জিইউআই ফ্রেমওয়ার্ক, যা পাইথনের সাথে ডিফল্টরূপে বহন করে এবং অন্যান্য শীতল স্টাফ সহ ক্লিপবোর্ড অ্যাক্সেসের পদ্ধতি রয়েছে।

আপনার কেবলমাত্র যদি সিস্টেম ক্লিপবোর্ডে কিছু পাঠ্য লাগানো হয় তবে এটি এটি করবে:

from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.update() # now it stays on the clipboard after the window is closed
r.destroy()

এবং এগুলি সবই, প্ল্যাটফর্ম-নির্দিষ্ট তৃতীয় পক্ষের লাইব্রেরিগুলির সাথে গোলমাল করার দরকার নেই।

যদি আপনি পাইথন 3 ব্যবহার করেন তবে এর TKinterসাথে প্রতিস্থাপন করুন tkinter


55
ক্লিপবোর্ডের সামগ্রীগুলি পান: ফলাফল = r.selection_get (নির্বাচন = "ক্লিপবোর্ড")
এমজে

34
@ সুরডিন টিনকির অজগর 3 তে টিকিনটারের নামকরণ করা হয়েছিল, সুতরাং এটি আপনি কোন সংস্করণটি ব্যবহার করছেন তার উপর নির্ভর করে।
সৎ আবে

24
আমার সমস্ত অ্যাপ্লিকেশনগুলি এই ফাংশনটি সহ ক্লিপবোর্ডের বিষয়বস্তুগুলি পেস্ট করার পরে প্রতিক্রিয়া জানায়, ফলাফলটি ভাল কাজ করে।
বার্টলোমিয়েজ লেয়ান্ডোভস্কি

14
আমি ফোন না করলে এটি কাজ করে r.destroy()। আমি যখন এটি কল করি, ক্লিপবোর্ডটি খালি হয়ে যায় এবং Ctrl-V টিপলে লক্ষ্য অ্যাপটি হিমশীতল হতে পারে। (ওএস: উইন্ডোজ 7 এক্স 64)
নেটভোপ

8
আমার কাছে এটি অজগর 3.4 এর জন্য কাজ করে না তবে এটি অজগর ২.7 এর জন্য কাজ করে (হ্যাঁ, টিন্টারের পরিবর্তে টিন্টারের সাথে)
ম্যাটি

79

আমার কাছে কোনও সমাধান ছিল না, কেবল একটি কর্মক্ষেত্র।

উইন্ডোজ ভিস্তার পরে একটি ইনবিল্ট কমান্ড রয়েছে যা clipকমান্ড লাইন থেকে একটি কমান্ডের আউটপুট নেয় এবং ক্লিপবোর্ডে রাখে। উদাহরণস্বরূপ ipconfig | clip,।

সুতরাং আমি osমডিউলটি দিয়ে একটি ফাংশন তৈরি করেছি যা একটি স্ট্রিং নেয় এবং এটি ইনবিল্ট উইন্ডোজ সমাধান ব্যবহার করে ক্লিপবোর্ডে যুক্ত করে।

import os
def addToClipBoard(text):
    command = 'echo ' + text.strip() + '| clip'
    os.system(command)

# Example
addToClipBoard('penny lane')

# Penny Lane is now in your ears, eyes, and clipboard.

পূর্বে মন্তব্যে যেমন উল্লিখিত হয়েছে, এই পদ্ধতির একটি খারাপ দিক হ'ল echoকমান্ডটি স্বয়ংক্রিয়ভাবে আপনার পাঠ্যের শেষে একটি নতুন লাইন যুক্ত করে। এটি এড়াতে আপনি কমান্ডের একটি পরিবর্তিত সংস্করণ ব্যবহার করতে পারেন:

def addToClipBoard(text):
    command = 'echo | set /p nul=' + text.strip() + '| clip'
    os.system(command)

যদি আপনি Windows XP ব্যবহার করেন তাহলে এটা শুধু পদক্ষেপগুলি অনুসরণ কাজ করবে কপি এবং পেস্ট করুন উইন্ডোজ এক্সপি প্রো এর থেকে ক্লিপবোর্ডে প্রম্পট সোজা আদেশ


20
যদি textথাকে তবে কী হয় | calc.exe ?
উইল বালেনথিন

2
@ উইলিব্যালেনটিন তারপর আপনার এটি ডাবল উদ্ধৃতিতে মোড়ানো প্রয়োজন। তবে যদি এটি ডাবল কোটস চালায়? তারপরে আপনার দ্বিগুণ উদ্ধৃতিগুলি দ্বিগুণ করতে হবে। text with " quotes and | pipeহয়ে "text with "" quotes and | pipe" এই 95. চেয়ে পুরোনো উইন্ডোজের সাথে সিস্টেমে সমস্যা থাকতে পারে যদিও
ColBeseder

5
অত্যন্ত সুরক্ষিত ফাংশন ... আপনার ক্লিপবোর্ডে প্রেরিত সামগ্রী এখন একটি প্রবেশ ভেক্টর এবং এইভাবে আপনার আক্রমণ পৃষ্ঠকে বাড়িয়ে তোলে।
ফিল এল।

2
আমারও নিউলাইনগুলির জন্য সমর্থন প্রয়োজন, তাই আমি এটি ব্যবহারের জন্য এটি পরিবর্তন করেছি type। আমি আমার পাঠ্য ফাইল করতে লিখি, এবং কমান্ডটি ব্যবহার করি type myfile.txt | clip
মিক্স্পোটেরিক্স

1
যদিও এটি আমার কাছে সেরা উত্তর, এটিতে একটি সমস্যা রয়েছে (পাইথন 3.5, উইন্ডোজ 10); একটি অযাচিত নিউলাইন সর্বদা স্ট্রিংয়ের শেষে যুক্ত করা হয়। কীভাবে এড়ানো যায়?
মিমজেজ

42

আপনি উইন্ডোজ এপিআইতে ট্যাপ করতে সিটিপস ব্যবহার করতে পারেন এবং বিশাল পাইউইন 32 প্যাকেজ এড়াতে পারেন। এটি আমি ব্যবহার করি (ক্ষীণ শৈলীটি ক্ষমা করুন, তবে ধারণাটি এখানে রয়েছে):

import ctypes

# Get required functions, strcpy..
strcpy = ctypes.cdll.msvcrt.strcpy
ocb = ctypes.windll.user32.OpenClipboard    # Basic clipboard functions
ecb = ctypes.windll.user32.EmptyClipboard
gcd = ctypes.windll.user32.GetClipboardData
scd = ctypes.windll.user32.SetClipboardData
ccb = ctypes.windll.user32.CloseClipboard
ga = ctypes.windll.kernel32.GlobalAlloc    # Global memory allocation
gl = ctypes.windll.kernel32.GlobalLock     # Global memory Locking
gul = ctypes.windll.kernel32.GlobalUnlock
GMEM_DDESHARE = 0x2000

def Get():
  ocb(None) # Open Clip, Default task

  pcontents = gcd(1) # 1 means CF_TEXT.. too lazy to get the token thingy...

  data = ctypes.c_char_p(pcontents).value

  #gul(pcontents) ?
  ccb()

  return data

def Paste(data):
  ocb(None) # Open Clip, Default task

  ecb()

  hCd = ga(GMEM_DDESHARE, len(bytes(data,"ascii")) + 1)

  pchData = gl(hCd)

  strcpy(ctypes.c_char_p(pchData), bytes(data, "ascii"))

  gul(hCd)

  scd(1, hCd)

  ccb()

5
কমপক্ষে পাইথন ২.6 x64৪ এ আমাকে পরিবর্তন bytes(data,"ascii")করতে হয়েছিল bytes(data)। প্রশ্নের উত্তরের জন্য ধন্যবাদ, আমি পাইউইন 32 বা টি কে বা অন্যান্য কিছু জিনিস ব্যবহার করতে পারি না এবং এটি কাজ করে।
প্যাট করউইন

1
কোনও উদ্বেগের কথা না, তবে মনে রাখবেন যে ক্লিপবোর্ড থেকে ফিরে আসা ডেটা আসলে অন্য একটি এনকোডিংয়ে রয়েছে, আমি বিশ্বাস করি এটি উইন্ডোজ সিপি -১২২২। এটি কিছুটা একসাথে হ্যাক হয়েছিল, তবে আপনি যদি সঠিক এনকোডিংটি ব্যবহার না করেন তবে অ-এসকিআই অক্ষরগুলি একটি ত্রুটি বা ভুলভাবে ডিকোড উত্থাপন করবে।
কাপাসে

পরিবর্তনশীল নামগুলির জন্য মন্তব্যগুলির প্রয়োজন হবে না এবং সমস্ত কিছুই ইউনিকোড সমর্থন করে।
সিস টিমারম্যান

bytes(data, "mbcs")উইন্ডোজ ডিফল্ট এনকোডিংয়ের সাথে কাজ করবে। আমাকে এটি ক্লিপবোর্ডে লোড করতে "másreas ç saod é í ó u* ü ö ï/"এবং এটি সঠিকভাবে ফিরে পড়ার অনুমতি দিয়েছে।
mvbentes

1
এমবিসিএস ব্যবহার করে এটি আমাকে দেয়: ওএসআরর: ব্যতিক্রম: অ্যাক্সেস লঙ্ঘন 0x00000000000000000000
সেকি লোন

35

আপনি পাইপক্র্লিপ ব্যবহার করতে পারেন - ক্রস প্ল্যাটফর্ম ক্লিপবোর্ড মডিউল। অথবা জেরক্স - উইন্ডোতে কাজ করার জন্য উইন 32 পাইথন মডিউলটি বাদে অনুরূপ মডিউল।


pyperclipউইন্ডোজ ইউনিকোড না। win32clipboardআছে।
সিস টিমারম্যান

13
আমার pyperclipপ্যাচ গ্রহণ করা হয়েছিল; c:\python34\Scripts\pip install --upgrade pyperclipইউনিকোড পাঠ্য পরিচালনা করতে
সিস টিমারম্যান

1
এটি যে তা pyperclipনয় তা জানতে আমার কিছুটা সময় লেগেছিল paperclip। এছাড়াও, ২০১ on সালের মতো, পাইপক্রিপ ইউনিকোডের অক্ষরগুলির সাথেও কাজ করে। আমি পাইথন 3.5 এবং পাইপারক্লিপ 1.5.27 সহ উইন 10 -৪-বিটে কাজ করতে characters ° ©© characters অক্ষরগুলি পরীক্ষা করেছি।
এনপি 8

28

আপনি দুর্দান্ত পান্ডা ব্যবহার করতে পারেন, এতে ক্লিপবোর্ড সমর্থন অন্তর্নির্মিত রয়েছে তবে আপনাকে একটি ডেটা ফ্রেমের মধ্য দিয়ে যেতে হবে।

import pandas as pd
df=pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)

3
+1 টি। আমি এই সমাধানটি পছন্দ করি। এটি গৃহীত টিনেটার সমাধানের চেয়েও সহজ। আপনি যদি যাইহোক পান্ডাস আমদানি করেন তবে অতিরিক্ত কোনও ওভারহেড নেই। এটি সমস্ত প্ল্যাটফর্ম জুড়েও কাজ করে। এটি এমনকি (বেশিরভাগ ক্ষেত্রে) একটি নতুন প্যাকেজ ইনস্টল করার প্রয়োজন হয় না।
চেইমজি

4
এটি pyperclipযাইহোক ব্যবহার করে , তাই আরও ভাল ব্যবহার করুনpyperpclip
ম্যাক্সব্লেলিক

1
বেশিরভাগ লোকের জন্য (যেমন আমি) pandasসহজেই উপলব্ধ তবে কার্যকর import pyperclipহয় না। সুতরাং আমি "আরও ভাল ব্যবহারের পাইপার্ক্লিপ" এর সাথে একমত নই।
ডক্টর কোর

1
আপনি যদি কেবল পান্ডা ব্যবহারে সীমাবদ্ধ থাকেন তবে আপনি সরাসরি পাইপক্রিপ ব্যবহার করতে পারেন import pandas.io.clipboard as pyperclipবা যা খুশি নামকরণ করতে পারেন। এটি সেখানেই pandasঅন্তত বসে আছে
ডেভিড কালবার্থ

1
এটি আপনার অনুলিপি করা স্ট্রিংয়ে একটি নতুন লাইন অক্ষর যুক্ত করেছে বলে মনে হচ্ছে
Gijs van Oort

18

সবচেয়ে সহজ উপায় পাইপক্র্লিপ সহ । অজগর 2 এবং 3 এ কাজ করে।

এই গ্রন্থাগারটি ইনস্টল করতে, ব্যবহার করুন:

pip install pyperclip

ব্যবহারের উদাহরণ:

import pyperclip

pyperclip.copy("your string")

আপনি যদি ক্লিপবোর্ডের সামগ্রীগুলি পেতে চান:

clipboard_content = pyperclip.paste()

3
এবং pyperclipমডিউল পাইথন সঙ্গে আসে? কোন সংস্করণ? পাইথনে এটি আমি দেখতে পাচ্ছি না 2.7 ...
স্যামবি

8
হ্যাঁ, এমন একটি উত্তরকে কম করে দাও যা সহজেই 5 টিরও কম লাইনে সমস্যা সমাধান করে; কারণ রেফারেন্সিংয়ের মতো ছোট বিবরণ আরও গুরুত্বপূর্ণ; আমার বন্ধু স্ট্যাকওভারফ্লো দুর্দান্ত ব্যবহার। আমি যাইহোক নীটপিকারদের জন্য সম্পাদনা করব। আপনার জন্য টিপ: নিম্নোক্ত উত্তরগুলি যা অকেজো বা যা সমস্যার সমাধান করে না; সমস্যার সমাধান করুন বা কমপক্ষে কার্যকর হবেন এমন উত্তরগুলি আপভোট করুন এবং ডাউনভোটিংয়ের পরিবর্তে একটি দরকারী উত্তর উন্নত করতে মন্তব্যগুলিতে একটি পরামর্শ দিন।
maviz

2
রেফারেন্স ছাড়া, আপনি কিছুই সমাধান। তবে আপনি যেহেতু লিঙ্কটি যুক্ত করেছেন, আমি ডাউনভোটটি সরিয়ে ফেলব, কারণ উত্তর এখন ভাল now আমার বড় সমস্যাটি হ'ল এটি একটি স্ট্যান্ডার্ড লাইব্রেরি আমদানির মতো দেখায়; এটি কোডের মতো দেখে মনে হয়েছিল আপনি এটি অনুলিপি / পেস্ট করতে পারেন যখন তা ছিল না।
গ্লোয়ে

pyperclip.paste()চিত্রগুলি নিয়ে কাজ করে না কেবল NoneTypeত্রুটি ফেরায়। তবে ডান ক্লিক এবং অনুলিপি সহ কাজ করে অনুলিপি ব্যবহার করে অনুলিপি করা ফলাফলগুলি পেস্ট করতে।
জয়রিজ্জো

11

আমি বিভিন্ন সমাধান চেষ্টা করেছি, তবে এটিই সবচেয়ে সহজতম যা আমার পরীক্ষায় উত্তীর্ণ :

#coding=utf-8

import win32clipboard  # http://sourceforge.net/projects/pywin32/

def copy(text):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
def paste():
    win32clipboard.OpenClipboard()
    data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
    return data

if __name__ == "__main__":  
    text = "Testing\nthe “clip—board”: 📋"
    try: text = text.decode('utf8')  # Python 2 needs decode to make a Unicode string.
    except AttributeError: pass
    print("%r" % text.encode('utf8'))
    copy(text)
    data = paste()
    print("%r" % data.encode('utf8'))
    print("OK" if text == data else "FAIL")

    try: print(data)
    except UnicodeEncodeError as er:
        print(er)
        print(data.encode('utf8'))

উইন্ডোজ ৮.১ এবং পাইথন ২.7-এ পাইথন ৩.৪-এ ঠিক আছে এবং উইন্ডোজ 7.. এ ইউনিক্সের লাইনফিড উইন্ডো থেকে অনুলিপি সহ ইউনিকোড ডেটা পড়ার সময়। পাইথন প্রস্থান করার পরে অনুলিপি করা তথ্য ক্লিপবোর্ডে থাকে:"Testing the “clip—board”: 📋"

আপনি যদি বাহ্যিক নির্ভরতা না চান তবে এই কোডটি ব্যবহার করুন (এখন ক্রস-প্ল্যাটফর্মের অংশ pyperclip- C:\Python34\Scripts\pip install --upgrade pyperclip):

def copy(text):
    GMEM_DDESHARE = 0x2000
    CF_UNICODETEXT = 13
    d = ctypes.windll # cdll expects 4 more bytes in user32.OpenClipboard(None)
    try:  # Python 2
        if not isinstance(text, unicode):
            text = text.decode('mbcs')
    except NameError:
        if not isinstance(text, str):
            text = text.decode('mbcs')
    d.user32.OpenClipboard(0)
    d.user32.EmptyClipboard()
    hCd = d.kernel32.GlobalAlloc(GMEM_DDESHARE, len(text.encode('utf-16-le')) + 2)
    pchData = d.kernel32.GlobalLock(hCd)
    ctypes.cdll.msvcrt.wcscpy(ctypes.c_wchar_p(pchData), text)
    d.kernel32.GlobalUnlock(hCd)
    d.user32.SetClipboardData(CF_UNICODETEXT, hCd)
    d.user32.CloseClipboard()

def paste():
    CF_UNICODETEXT = 13
    d = ctypes.windll
    d.user32.OpenClipboard(0)
    handle = d.user32.GetClipboardData(CF_UNICODETEXT)
    text = ctypes.c_wchar_p(handle).value
    d.user32.CloseClipboard()
    return text

আপনি কোথায় পাবেন win32clipboard? এটি আমার পাইথনের ২.7 অংশ নয়। এবং পরিবর্তে কেন pasteব্যবহার CF_TEXTকরে CF_UNICODETEXT?
মার্ক

@ মার্করানসাম পাইউইন 32, এবং যেহেতু আমি test ব্যবহার করে আরও কঠিন না করা পর্যন্ত আমার পরীক্ষাটি ঠিকঠাক হয়েছিল 📋 আমি কোড আপডেট করেছি।
সিস টিমারম্যান

11

কিছু কারণে আমি কখনই আমার পক্ষে কাজ করার জন্য টাকার সমাধান পেতে সক্ষম হইনি। কাপাসের সমাধানটি অনেক বেশি কার্যক্ষম , তবে ফর্ম্যাটিংটি আমার শৈলীর বিপরীতে এবং এটি ইউনিকোডের সাথে কাজ করে না। এখানে একটি পরিবর্তিত সংস্করণ।

import ctypes

OpenClipboard = ctypes.windll.user32.OpenClipboard
EmptyClipboard = ctypes.windll.user32.EmptyClipboard
GetClipboardData = ctypes.windll.user32.GetClipboardData
SetClipboardData = ctypes.windll.user32.SetClipboardData
CloseClipboard = ctypes.windll.user32.CloseClipboard
CF_UNICODETEXT = 13

GlobalAlloc = ctypes.windll.kernel32.GlobalAlloc
GlobalLock = ctypes.windll.kernel32.GlobalLock
GlobalUnlock = ctypes.windll.kernel32.GlobalUnlock
GlobalSize = ctypes.windll.kernel32.GlobalSize
GMEM_MOVEABLE = 0x0002
GMEM_ZEROINIT = 0x0040

unicode_type = type(u'')

def get():
    text = None
    OpenClipboard(None)
    handle = GetClipboardData(CF_UNICODETEXT)
    pcontents = GlobalLock(handle)
    size = GlobalSize(handle)
    if pcontents and size:
        raw_data = ctypes.create_string_buffer(size)
        ctypes.memmove(raw_data, pcontents, size)
        text = raw_data.raw.decode('utf-16le').rstrip(u'\0')
    GlobalUnlock(handle)
    CloseClipboard()
    return text

def put(s):
    if not isinstance(s, unicode_type):
        s = s.decode('mbcs')
    data = s.encode('utf-16le')
    OpenClipboard(None)
    EmptyClipboard()
    handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, len(data) + 2)
    pcontents = GlobalLock(handle)
    ctypes.memmove(pcontents, data, len(data))
    GlobalUnlock(handle)
    SetClipboardData(CF_UNICODETEXT, handle)
    CloseClipboard()

paste = get
copy = put

এই উত্তরটি প্রথম তৈরি হওয়ার পরে উপরের দিকটি পরিবর্তন হয়েছে, বর্ধিত ইউনিকোড অক্ষর এবং পাইথন ৩. আরও ভালভাবে মোকাবেলা করার জন্য এটি পাইথন ২.7 এবং ৩.৫ উভয় ক্ষেত্রেই পরীক্ষা করা হয়েছে এবং ইমোজি যেমন এমনকি এটির সাথেও কাজ করে \U0001f601 (😁)


@ চিজটিম্মারম্যান কেন উইন্ডোজ ৮.১ সিস্টেম আছে তা পরীক্ষা করতে আমি পছন্দ করি। আমার পরে আজ তদন্ত করার সুযোগ থাকতে পারে। আপনি কি নিশ্চিত যে ক্লিপবোর্ডে আপনার পাঠ্য ছিল?
মার্ক

হ্যাঁ. আমি গত তিন দিন ধরে পাইথনের ক্লিপবোর্ড কোডটি ব্যাপকভাবে পরীক্ষা করেছি।
সিইস টিমারম্যান

put()ফাংশন এছাড়াও কাজ করা প্রয়োজন; ইমোজি "📋" (000 U0001f400) "🐀" (000 U0001f4cb), বা "📋" হিসাবে অনুলিপি করা হয়েছে 📋 "📋" এ পরিণত হয়।
সিস টিমারম্যান

@ সিজটাইমারম্যান এটি ব্যাখ্যা করেছেন। অভ্যন্তরীণ ইউনিকোড উপস্থাপনা পরিবর্তন হয়েছে, আমি মনে করতে পারি না এটি 3.3 বা 3.4 ছিল কিনা। এটি ঠিক করার জন্য ইউটিএফ -16 এ একটি স্পষ্ট এনকোডিং প্রয়োজন। এটি কোনও বাগ নয়।
মার্ক

1
@ ইয়ংগার ক্রিশ্চিয়েনসেন অবশেষে এই পরিবর্তনগুলি ঘটাতে পেরেছি। আমি এখন আত্মবিশ্বাসী যে এই কোডটি পাইথনের বেশিরভাগ আধুনিক সংস্করণ এবং প্রতিটি সম্ভাব্য ইউনিকোড চরিত্রের জন্য কাজ করে।
মার্ক রান্সম


5

আপনি মডিউল ব্যবহার করতে পারেন clipboard। এটি সহজ এবং ব্যবহার করা অত্যন্ত সহজ। সঙ্গে কাজ করে ম্যাক , উইন্ডোজ , & লিনাক্স
দ্রষ্টব্য: এটির একটি বিকল্পpyperclip

ইনস্টল করার পরে, এটি আমদানি করুন:

import clipboard

তারপরে আপনি এটির মতো অনুলিপি করতে পারেন:

clipboard.copy("This is copied")

আপনি অনুলিপি করা পাঠ্যও আটকে দিতে পারেন:

clipboard.paste()

2
এটি সেরা সমাধান মত মনে হচ্ছে। ক্লিপবোর্ড দিয়ে ইনস্টল করা যেতে পারে pip install clipboard
vy32

5

আপনি পান্ডার উপর নির্ভর করে যদি ঠিক আছেন তবে আমি এখানে পাওয়া সবচেয়ে সহজ এবং নির্ভরযোগ্য উপায়। তবে আমি মনে করি না এটি আনুষ্ঠানিকভাবে পান্ডাস এপিআইয়ের অংশ তাই এটি ভবিষ্যতের আপডেটগুলির সাথে ভেঙে যেতে পারে। এটি 0.25.3 হিসাবে কাজ করে

from pandas.io.clipboard import copy 
copy("test")

3

উইজেটগুলির এমন একটি পদ্ধতিও .clipboard_get()রয়েছে যা ক্লিপবোর্ডের সামগ্রীগুলি প্রদান করে (যদি না ক্লিপবোর্ডে ডেটার ধরণের ভিত্তিতে কোনও ধরণের ত্রুটি ঘটে থাকে)।

clipboard_get()পদ্ধতি এই বাগ রিপোর্ট উল্লেখ করা হয়:
http://bugs.python.org/issue14777

আশ্চর্যের বিষয় হল, এই পদ্ধতিটি সাধারণ (তবে আনুষ্ঠানিক) অনলাইন টকগুলিতে উল্লেখ করা হয়নি কারণ আমি সাধারণত উল্লেখ করি যে ডকুমেন্টেশন উত্সগুলি।


3

আমি মনে করি এটির একটি আরও সহজ সমাধান রয়েছে।

name = input('What is your name? ')
print('Hello %s' % (name) )

তারপরে কমান্ড লাইনে আপনার প্রোগ্রামটি চালান

পাইথন greeter.py | ক্লিপ

এটি আপনার ফাইলের আউটপুটটি ক্লিপবোর্ডে পাইপ করবে


এটি একটি ভাল সমাধান তবে আমি কল্পনা করি যে প্রচুর অজগরটি একটি আইডিইতে তৈরি এবং চালিত হয়
জেসি রেজা খোরাসানী

2

ছাড়াও মার্ক মুক্তিপণ এর উত্তর ব্যবহার ctypes এই (? সব) x64 সিস্টেমের জন্য কাজ যেহেতু হ্যান্ডলগুলি INT-মাপ ছেঁটে ফেলা হবে বলে মনে হচ্ছে না। স্পষ্টভাবে আরগস এবং রিটার্ন মানগুলি সংজ্ঞায়িত করা এই সমস্যাটি কাটিয়ে উঠতে সহায়তা করে।

import ctypes
import ctypes.wintypes as w

CF_UNICODETEXT = 13

u32 = ctypes.WinDLL('user32')
k32 = ctypes.WinDLL('kernel32')

OpenClipboard = u32.OpenClipboard
OpenClipboard.argtypes = w.HWND,
OpenClipboard.restype = w.BOOL

GetClipboardData = u32.GetClipboardData
GetClipboardData.argtypes = w.UINT,
GetClipboardData.restype = w.HANDLE

EmptyClipboard = u32.EmptyClipboard
EmptyClipboard.restype = w.BOOL

SetClipboardData = u32.SetClipboardData
SetClipboardData.argtypes = w.UINT, w.HANDLE,
SetClipboardData.restype = w.HANDLE

CloseClipboard = u32.CloseClipboard
CloseClipboard.argtypes = None
CloseClipboard.restype = w.BOOL

GHND = 0x0042

GlobalAlloc = k32.GlobalAlloc
GlobalAlloc.argtypes = w.UINT, w.ctypes.c_size_t,
GlobalAlloc.restype = w.HGLOBAL

GlobalLock = k32.GlobalLock
GlobalLock.argtypes = w.HGLOBAL,
GlobalLock.restype = w.LPVOID

GlobalUnlock = k32.GlobalUnlock
GlobalUnlock.argtypes = w.HGLOBAL,
GlobalUnlock.restype = w.BOOL

GlobalSize = k32.GlobalSize
GlobalSize.argtypes = w.HGLOBAL,
GlobalSize.restype = w.ctypes.c_size_t

unicode_type = type(u'')

def get():
    text = None
    OpenClipboard(None)
    handle = GetClipboardData(CF_UNICODETEXT)
    pcontents = GlobalLock(handle)
    size = GlobalSize(handle)
    if pcontents and size:
        raw_data = ctypes.create_string_buffer(size)
        ctypes.memmove(raw_data, pcontents, size)
        text = raw_data.raw.decode('utf-16le').rstrip(u'\0')
    GlobalUnlock(handle)
    CloseClipboard()
    return text

def put(s):
    if not isinstance(s, unicode_type):
        s = s.decode('mbcs')
    data = s.encode('utf-16le')
    OpenClipboard(None)
    EmptyClipboard()
    handle = GlobalAlloc(GHND, len(data) + 2)
    pcontents = GlobalLock(handle)
    ctypes.memmove(pcontents, data, len(data))
    GlobalUnlock(handle)
    SetClipboardData(CF_UNICODETEXT, handle)
    CloseClipboard()

#Test run
paste = get
copy = put
copy("Hello World!")
print(paste())

0
import wx

def ctc(text):

    if not wx.TheClipboard.IsOpened():
        wx.TheClipboard.Open()
        data = wx.TextDataObject()
        data.SetText(text)
        wx.TheClipboard.SetData(data)
    wx.TheClipboard.Close()

ctc(text)

2
সমস্যা এবং সমাধানের একটি ব্যাখ্যা সহায়ক হবে।
শোদেব

ক্লিপবোর্ডে পাঠ্য অনুলিপি করার জন্য একটি ফাংশন। ডাব্লুএক্স পাইথন লাইব্রেরি ব্যবহার করে (আমি কখনও টি কে শিখিনি) এখানে জিজ্ঞাসিত প্রশ্নের আরও একটি সমাধান।
jlk

আপনার সমস্যার সমাধান / সমাধান @jlk এর ব্যাখ্যা অন্তর্ভুক্ত করার জন্য নির্দ্বিধায় দ্বিধা করুন - এটি করার ফলে উত্তরগুলি আরও কার্যকর হয়। এছাড়াও, চেষ্টা করার জন্য ধন্যবাদ, তবে আমি মনে করি যে মূল পোস্টারটিতে বিশেষভাবে টাকা চাওয়ার কোনও কারণ ছিল।
আইসড ওয়াটার

0

আমি এখানে যে স্নিপেটটি ভাগ করেছি তা টেক্সট ফাইলগুলির ফর্ম্যাট করার দক্ষতার সুযোগ নিয়েছে: আপনি যদি কোনও জটিল আউটপুটটি ক্লিপবোর্ডে অনুলিপি করতে চান তবে কী হবে? (কলামে একটি অদ্ভুত অ্যারে বা কোনও কিছুর একটি তালিকা বলুন)

import subprocess
import os

def cp2clip(clist):

    #create a temporary file
    fi=open("thisTextfileShouldNotExist.txt","w")

    #write in the text file the way you want your data to be
    for m in clist:
        fi.write(m+"\n")

    #close the file
    fi.close()

    #send "clip < file" to the shell
    cmd="clip < thisTextfileShouldNotExist.txt"
    w = subprocess.check_call(cmd,shell=True)

    #delete the temporary text file
    os.remove("thisTextfileShouldNotExist.txt")

    return w

কেবল উইন্ডোজের জন্যই কাজ করে, আমার ধারণা লিনাক্স বা ম্যাকের জন্য মানিয়ে নেওয়া যায়। কিছুটা জটিল হতে পারে ...

উদাহরণ:

>>>cp2clip(["ET","phone","home"])
>>>0

যে কোনও পাঠ্য সম্পাদকটিতে Ctrl + V:

ET
phone
home

0

এটি atomizer এর উন্নত উত্তর ।

নোট 2 কল update()এবং 200 msতাদের মধ্যে বিলম্ব। ক্লিপবোর্ডের অস্থিরতার কারণে তারা হিমায়িত অ্যাপ্লিকেশনগুলিকে সুরক্ষা দেয়:

from Tkinter import Tk
import time     

r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('some string')

r.update()
time.sleep(.2)
r.update()

r.destroy()

0

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

import clipboard as cp
cp.copy("abc")

ক্লিপবোর্ডে এখন 'এবিসি' রয়েছে। শুভ পেস্টিং!


0

সমস্ত উত্তর আমার পাইথন কনফিগারেশনের জন্য কাজ করে নি তাই এই সমাধানটি কেবল সাবপ্রসেসি মডিউলটিই ব্যবহার করে। তবে ম্যাকের জন্য বা উইন্ডোজের জন্য copy_keywordহতে হবে :pbcopyclip

import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value 😀')

এখানে আরও কিছু বিস্তৃত কোড যা বর্তমান অপারেটিং সিস্টেমটি স্বয়ংক্রিয়ভাবে যাচাই করে:

import platform
import subprocess

copy_string = 'New Clipboard Value 😀'

# Check which operating system is running to get the correct copying keyword.
if platform.system() == 'Darwin':
    copy_keyword = 'pbcopy'
elif platform.system() == 'Windows':
    copy_keyword = 'clip'

subprocess.run(copy_keyword, universal_newlines=True, input=copy_string)

আইডিএল ক্র্যাশ হয় যখন আপনি সেই স্ট্রিংটি পেস্ট করার চেষ্টা করেন।
ম্যাক্স ডি স্টফ

@ ম্যাক্সডোস স্টাফ এটি ইমোজি ছাড়াই চেষ্টা করুন। আমি জানি না কেন এটি ডিফল্ট আইডিএল-তে কাজ করে না, তবে এটি অন্যান্য আইডলিতে কাজ করে।
ফেচাইনেটর 7

0

আপনি winclip32 মডিউল ব্যবহার করতে পারেন! ইনস্টল:

pip install winclip32

অনুলিপন করতে:

import winclip32
winclip32.set_clipboard_data(winclip32.UNICODE_STD_TEXT, "some text")

পেতে:

import winclip32
print(winclip32.get_clipboard_data(winclip32.UNICODE_STD_TEXT))

আরও তথ্যের জন্য: https://pypi.org/project/winclip32/


-1

ক্লিপবোর্ড অনুলিপি করতে কোড স্নিপেট:

( ক্লিপবোর্ড.পি ) নামের একটি মডিউলে একটি মোড়ক পাইথন কোড তৈরি করুন :

import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import Clipboard
def setText(text):
    Clipboard.SetText(text)

def getText():
    return Clipboard.GetText()

তারপরে আপনার কোডে উপরের মডিউলটি আমদানি করুন।

import io
import clipboard
code = clipboard.getText()
print code
code = "abcd"
clipboard.setText(code)

আইরন পাইথনে ব্লগ পোস্ট ক্লিপবোর্ড অ্যাক্সেসে আমার অবশ্যই ক্রেডিট দিতে হবে ।


-2

আপনি এটি চেষ্টা করতে পারেন:

command = 'echo content |clip'
subprocess.check_call(command, shell=True)

-9
from Tkinter import Tk
clip = Tk()

হতে পারে আপনি গঠনমূলক হতে পারেন যা আপনি পেয়েছেন ত্রুটি বার্তা এবং আপনি ব্যবহার করছেন অজগরটির সংস্করণ। 2 লাইন আমি লিখেছেন পাইথন 2. সাথে কাজে আপনাকে ধন্যবাদ
tagoma

2
প্রশ্নটি হল "পাইথন ব্যবহার করে উইন্ডোজ ক্লিপবোর্ডে আমি একটি স্ট্রিং কীভাবে অনুলিপি করব"। অবশ্যই এটি ক্র্যাশ হয় না তবে প্রশ্নটিতে এটি পুরোপুরি সন্তুষ্ট হয় না যে এটি আসলে কিছুই
আন্তি হাপাল

2
প্রশ্ন: পাইথন ব্যবহার করে আমি উইন্ডোজ ক্লিপবোর্ডে একটি স্ট্রিং কীভাবে অনুলিপি করব? উত্তর: একটি জিইউআই লাইব্রেরি আমদানি করুন এবং মূল অবজেক্টটি তৈরি করুন। । দুঃখিত, এটি কীভাবে বর্ণিত প্রশ্নের উত্তর দেয়?
মার্টিজন পিটারস

পাইথন 3 দিয়ে আপনি এই লাইনগুলি বরাবর কিছু করতে পারেন: tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # বর্তমান ক্লিপবোর্ডটি পরিষ্কার করুন> মাইস্ট্রিং = 'হ্যালো ওয়ার্ল্ড'> tki.clipboard_append (mystring)> tki.clipboard_get ( ) আউট [19]: 'হ্যালো ওয়ার্ল্ড'>
ট্যাগোমা

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