Pyperclip.copy: примеры (PYTHON)
pyperclip.copy(text: str): NoneФункция pyperclip.copy
Модуль Pyperclip предоставляет кроссплатформенную функцию pyperclip.copy() для копирования текста в системный буфер обмена. Она используется в случаях, когда программе требуется скопировать данные для последующей вставки пользователем или другими приложениями.
Функция принимает один обязательный аргумент:
- text - строка (тип str) или байты (тип bytes), содержащие данные для помещения в буфер обмена. Для строк поддерживается любой текст, включая многострочный.
Возвращаемое значение всегда равно None. Функция не генерирует исключений при успешном выполнении, но может вызвать pyperclip.PyperclipException при отсутствии доступного бэкенда или других ошибках, связанных с доступом к буферу обмена.
Внутренняя реализация автоматически определяет операционную систему и использует соответствующий механизм: pbcopy/pbpaste для macOS, xclip или xsel для Linux, и Win32 API для Windows.
Примеры использования
Базовое копирование текстовой строки:
import pyperclip
pyperclip.copy('Текст для буфера обмена')
print('Текст скопирован')Текст скопирован
Копирование многострочного текста:
import pyperclip
multiline_text = """Первая строка
Вторая строка
Третья строка"""
pyperclip.copy(multiline_text)# Текст помещен в буфер, готов для вставки
Копирование данных из переменной:
import pyperclip
result = 42 * 3.14
text_to_copy = f"Результат вычислений: {result}"
pyperclip.copy(text_to_copy)# В буфере обмена: "Результат вычислений: 131.88"
Альтернативные решения в Python
Для работы с буфером обмена в Python существуют другие модули:
- Tkinter - встроенный модуль с методом
clipboard_append(). Требует создания графического окна, что не всегда удобно в консольных приложениях. - Qt (PyQt/PySide) - предоставляет класс
QClipboardчерезQApplication.clipboard(). Используется в GUI-приложениях на Qt, обладает расширенными возможностями для работы с различными форматами данных. - GTK - через
Gtk.Clipboardдля приложений на основе GTK. - pywin32 - модуль для Windows, предоставляет прямой доступ к Win32 API функциям буфера обмена.
Pyperclip является предпочтительным выбором для простых скриптов и кроссплатформенных проектов благодаря минималистичному API и отсутствию зависимостей от графических библиотек.
Аналоги в других языках программирования
JavaScript (в браузере): используется асинхронный Clipboard API.
// Современный API
async function copyText(text) {
try {
await navigator.clipboard.writeText(text);
console.log('Текст скопирован');
} catch (err) {
console.error('Ошибка:', err);
}
}
copyText('Пример текста');Текст скопирован
Java: через класс java.awt.Toolkit.
import java.awt.Toolkit;
import java.awt.datatransfer.*;
public class ClipboardExample {
public static void main(String[] args) {
StringSelection selection = new StringSelection("Текст для копирования");
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, null);
}
}// Текст помещен в буфер обмена
C#: использование пространства имен System.Windows.Forms.
using System.Windows.Forms;
class Program {
static void Main() {
Clipboard.SetText("Пример текста");
}
}// Текст скопирован в буфер
Golang: через сторонние библиотеки, например github.com/atotto/clipboard.
package main
import (
"github.com/atotto/clipboard"
)
func main() {
clipboard.WriteAll("Текст для буфера")
}// Текст успешно скопирован
Типичные ошибки
1. Попытка копирования нестроковых объектов без преобразования:
import pyperclip
pyperclip.copy(12345) # Передача числа вместо строкиTypeError: expected str or bytes, not int
2. Отсутствие модуля pyperclip в системе:
import pyperclip # Если модуль не установленModuleNotFoundError: No module named 'pyperclip'
3. Отсутствие доступного бэкенда на Linux (ни xclip, ни xsel не установлены):
import pyperclip
pyperclip.copy("текст")pyperclip.PyperclipException:
Pyperclip could not find a copy/paste mechanism for your system.4. Проблемы с правами доступа или окружением в headless-среде:
# Запуск в серверном окружении без DISPLAY
import pyperclip
pyperclip.copy("данные")# Может вызвать исключение в зависимости от конфигурации
Изменения в последних версиях
В версии Pyperclip 1.8.0 (2020 год) была добавлена поддержка Wayland на Linux через использование wl-copy и wl-paste как предпочтительных утилит при работе в средах Wayland. Также улучшена обработка ошибок при отсутствии доступных бэкендов.
Начиная с версии 1.7.0, модуль стал корректно обрабатывать символы Unicode на всех платформах, включая Windows Console. Ранее в некоторых конфигурациях Windows возникали проблемы с кодировкой.
В текущих версиях функция pyperclip.copy() поддерживает как строки (str), так и байты (bytes), при этом байты копируются как есть, что полезно для работы с бинарными данными в совместимых бэкендах.
Расширенные примеры применения
Копирование содержимого файла в буфер обмена:
import pyperclip
def copy_file_content(filename):
try:
with open(filename, 'r', encoding='utf-8') as file:
content = file.read()
pyperclip.copy(content)
print(f'Содержимое файла {filename} скопировано')
except FileNotFoundError:
print("Файл не найден")
copy_file_content('документ.txt')Содержимое файла документ.txt скопировано
Интеграция с pandas для копирования данных DataFrame в виде CSV:
import pandas as pd
import pyperclip
df = pd.DataFrame({'Столбец A': [1, 2, 3], 'Столбец B': ['X', 'Y', 'Z']})
csv_data = df.to_csv(index=False, sep='\t')
pyperclip.copy(csv_data)
# Теперь в буфере табличные данные, готовые для вставки в Excel# В буфере: "Столбец A\tСтолбец B\n1\tX\n2\tY\n3\tZ"
Создание CLI-утилиты для копирования вывода команд:
import subprocess
import pyperclip
def copy_command_output(command):
result = subprocess.run(command, shell=True, capture_output=True, text=True)
if result.returncode == 0:
pyperclip.copy(result.stdout)
print("Вывод команды скопирован")
else:
print("Ошибка выполнения команды")
copy_command_output("echo Пример вывода")Вывод команды скопирован
Безопасное копирование с обработкой исключений:
import pyperclip
def safe_copy(text):
try:
pyperclip.copy(text)
return True
except pyperclip.PyperclipException as e:
print(f"Ошибка доступа к буферу: {e}")
return False
success = safe_copy("Важные данные")
print(f"Операция завершена: {'успешно' if success else 'с ошибкой'}")Операция завершена: успешно