본문 바로가기
목차
Python

pyperclip-Python에서 clipboard사용하기

by ds31x 2025. 8. 6.
728x90
반응형

 

pyperclip은 Python에서 시스템 클립보드에 접근할 수 있게 해주는 크로스 플랫폼 라이브러리임.

  • 텍스트를 클립보드에 복사하거나
  • 클립보드에서 텍스트를 가져오는 간단한 작업을 쉽게 수행할 수 있음

공식 URL
https://pypi.org/project/pyperclip/

 

pyperclip

A cross-platform clipboard module for Python. (Only handles plain text for now.)

pypi.org


설치

pip를 사용하여 간단히 설치할 수 있음:

pip install pyperclip

conda-forge에서도 지원

conda install -c conda-forge pyperclip

기본 사용법

클립보드에 텍스트 복사하기

pyperclip.copy() 함수를 사용하여 인자로 넘겨진 문자열을 클립보드에 복사:

import pyperclip

# 텍스트를 클립보드에 복사
pyperclip.copy('안녕하세요, pyperclip!')
print("텍스트가 클립보드에 복사되었습니다.")

클립보드에서 텍스트 가져오기

pyperclip.paste() 함수를 사용하여 클립보드의 내용을 가져옴:

import pyperclip

# 클립보드에서 텍스트 가져오기
clipboard_content = pyperclip.paste()
print(f"클립보드 내용: {clipboard_content}")

주의사항 및 팁

플랫폼별 고려사항

  • Windows: 별도의 설정 없이 작동.
  • macOS: pbcopypbpaste 명령어를 사용. 별도의 설정 필요없음
  • Linux: xclip 또는 xsel이 설치되어 있어야 함-주의.

Linux에서 필요한 패키지 설치:

# Ubuntu/Debian
sudo apt-get install xclip

# 또는
sudo apt-get install xsel

성능 최적화

  • 대용량 텍스트를 다룰 때는 메모리 사용량을 고려할 것.
  • 빈번한 클립보드 접근이 필요한 경우 적절한 지연시간이 필요할 수 있음.
  • GUI 애플리케이션에서 사용할 때는 메인 스레드 블로킹이 발생하지 않도록 주의해야함.

오류 처리

import pyperclip

def safe_clipboard_operation():
    """안전한 클립보드 작업"""
    try:
        # 클립보드에서 텍스트 가져오기
        content = pyperclip.paste()

        # 텍스트 처리
        processed_text = content.upper()

        # 클립보드에 복사
        pyperclip.copy(processed_text)

        print("클립보드 작업이 성공적으로 완료되었습니다.")

    except pyperclip.PyperclipException as e:
        print(f"클립보드 작업 중 오류 발생: {e}")
    except Exception as e:
        print(f"예상치 못한 오류 발생: {e}")

safe_clipboard_operation()

실용적인 예제들

1. 비밀번호 생성기와 연동

import pyperclip
import random
import string

def generate_password(length=12):
    """랜덤 비밀번호 생성 후 클립보드에 복사"""
    characters = string.ascii_letters + string.digits + "!@#$%^&*"
    password = ''.join(random.choice(characters) for _ in range(length))

    pyperclip.copy(password)
    print(f"비밀번호가 생성되어 클립보드에 복사되었습니다. (길이: {length})")
    return password

# 비밀번호 생성 및 복사
generate_password(16)

2. 텍스트 변환 도구

import pyperclip

def text_transformer():
    """클립보드의 텍스트를 다양한 형태로 변환"""
    original_text = pyperclip.paste()

    if not original_text:
        print("클립보드가 비어있습니다.")
        return

    print(f"원본 텍스트: {original_text}")

    # 변환 옵션 제공
    options = {
        '1': ('대문자로 변환', original_text.upper()),
        '2': ('소문자로 변환', original_text.lower()),
        '3': ('제목 형식으로 변환', original_text.title()),
        '4': ('공백 제거', original_text.replace(' ', '')),
        '5': ('단어 개수 세기', f"단어 개수: {len(original_text.split())}")
    }

    print("\n변환 옵션:")
    for key, (description, _) in options.items():
        print(f"{key}. {description}")

    choice = input("\n선택하세요 (1-5): ")

    if choice in options:
        description, result = options[choice]
        if choice != '5':  # 단어 개수 세기가 아닌 경우에만 클립보드에 복사
            pyperclip.copy(result)
            print(f"\n{description}: {result}")
            print("결과가 클립보드에 복사되었습니다.")
        else:
            print(f"\n{result}")

# 텍스트 변환기 실행
text_transformer()

3. 클립보드 히스토리 관리 ***

import pyperclip
import time
from datetime import datetime

class ClipboardMonitor:
    def __init__(self):
        self.history = []
        self.last_clipboard = ""

    def monitor_clipboard(self, duration=60):
        """지정된 시간 동안 클립보드 변화를 모니터링"""
        print(f"{duration}초 동안 클립보드를 모니터링합니다...")
        start_time = time.time()

        while time.time() - start_time < duration:
            current_clipboard = pyperclip.paste()

            if current_clipboard != self.last_clipboard and current_clipboard:
                timestamp = datetime.now().strftime("%H:%M:%S")
                self.history.append((timestamp, current_clipboard))
                print(f"[{timestamp}] 새로운 클립보드 내용: {current_clipboard[:50]}...")
                self.last_clipboard = current_clipboard

            time.sleep(1)

    def show_history(self):
        """클립보드 히스토리 출력"""
        if not self.history:
            print("클립보드 히스토리가 비어있습니다.")
            return

        print("\n=== 클립보드 히스토리 ===")
        for i, (timestamp, content) in enumerate(self.history, 1):
            print(f"{i}. [{timestamp}] {content}")

    def restore_from_history(self, index):
        """히스토리에서 특정 항목을 클립보드로 복원"""
        if 1 <= index <= len(self.history):
            _, content = self.history[index-1]
            pyperclip.copy(content)
            print(f"항목 {index}이 클립보드로 복원되었습니다.")
        else:
            print("잘못된 인덱스입니다.")

# 사용 예시
monitor = ClipboardMonitor()
# monitor.monitor_clipboard(30)  # 30초 동안 모니터링
# monitor.show_history()

같이보면 좋은 자료들

xclip에 대해

https://velog.io/@markyang92/xclip-linux-%ED%81%B4%EB%A6%BD%EB%B3%B4%EB%93%9C-vim-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%81%B4%EB%A6%BD%EB%B3%B4%EB%93%9C

 

xclip linux 클립보드 / vim 시스템 클립보드 / tmux 클립보드

xclip, vim 시스템 클립보드 사용

velog.io

 

윈도우의 clip.exe 에 대해

2023.07.07 - [utils] - [Vim] WSL2의 vim에서 윈도우 app로 copy and paste하기

 

[Vim] WSL2의 vim에서 윈도우 app로 copy and paste하기

예전에는 linux와 windows를 동시에 사용하기 보다 각각 사용하고, terminal로 접속하여 사용하던 것과 달리, WSL2를 사용하다보니 하나의 환경으로 왔다갔다의 경우가 점점 늘어났다. notepad보다는 vim

ds31x.tistory.com

 


 

728x90