Мне просто нужен python script, который копирует текст в буфер обмена.
После выполнения script выполняется вывод текста, который будет вставлен в другой источник. Можно ли написать python script, который выполняет эту работу?
Мне просто нужен python script, который копирует текст в буфер обмена.
После выполнения script выполняется вывод текста, который будет вставлен в другой источник. Можно ли написать python script, который выполняет эту работу?
См. Pyperclip. Пример (взятый из сайта Pyperclip):
import pyperclip
pyperclip.copy('The text to be copied to the clipboard.')
spam = pyperclip.paste()
Кроме того, см. Xerox. Но, похоже, у него больше зависимостей.
На mac я используйте эту функцию.
import os
data = "hello world"
os.system("echo '%s' | pbcopy" % data)
Он скопирует "hello world" в буфер обмена.
Использовать Tkinter:
fooobar.com/questions/42995/...
try:
from Tkinter import Tk
except ImportError:
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()
(Оригинальный автор: https://stackoverflow.com/users/449571/atomizer)
Pyperclip, похоже, соответствует задаче.
Чтобы использовать собственные каталоги Python, используйте:
import subprocess
def copy2clip(txt):
cmd='echo '+txt.strip()+'|clip'
return subprocess.check_call(cmd, shell=True)
Затем используйте:
copy2clip('This is on my clipboard!')
для вызова функции.
Это единственный способ, который работал у меня с помощью Python 3.5.2
плюс его проще всего реализовать с использованием стандартного пакета PyData
Открой https://stackoverflow.com/users/4502363/gadi-oron ответ (я полностью его скопировал) из Как скопировать строку в буфер обмена в Windows с использованием Python?
import pandas as pd
df=pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)
Я написал для него небольшую обертку, которую я ввел в мой профиль ipython
< 3
GTK3:
#!/usr/bin/python3
from gi.repository import Gtk, Gdk
class Hello(Gtk.Window):
def __init__(self):
super(Hello, self).__init__()
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_text("hello world", -1)
Gtk.main_quit()
def main():
Hello()
Gtk.main()
if __name__ == "__main__":
main()
Я пытаюсь использовать этот буфер обмена 0.0.4, и он работает хорошо.
https://pypi.python.org/pypi/clipboard/0.0.4
import clipboard
clipboard.copy("abc") # now the clipboard content will be string "abc"
text = clipboard.paste() # text will have the content of clipboard
Еще один ответ для улучшения: fooobar.com/questions/42995/... и fooobar.com/questions/112248/... (Tkinter).
Tkinter хорош, потому что он либо включен в Python (Windows), либо прост в установке (Linux), и поэтому требует минимальных зависимостей для конечного пользователя.
Здесь у меня есть "полномасштабный" пример, который копирует аргументы или стандартный ввод, в буфер обмена и - когда не в Windows - ждет, когда пользователь закроет приложение:
import sys
try:
from Tkinter import Tk
except ImportError:
# welcome to Python3
from tkinter import Tk
raw_input = input
r = Tk()
r.withdraw()
r.clipboard_clear()
if len(sys.argv) < 2:
data = sys.stdin.read()
else:
data = ' '.join(sys.argv[1:])
r.clipboard_append(data)
if sys.platform != 'win32':
if len(sys.argv) > 1:
raw_input('Data was copied into clipboard. Paste and press ENTER to exit...')
else:
# stdin already read; use GUI to exit
print('Data was copied into clipboard. Paste, then close popup to exit...')
r.deiconify()
r.mainloop()
else:
r.destroy()
Эти витрины:
raw_input
и print()
совместимостьPyQt5:
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtGui
from PyQt5.QtGui import QClipboard
import sys
def main():
app=QApplication(sys.argv)
cb = QApplication.clipboard()
cb.clear(mode=cb.Clipboard )
cb.setText("Copy to ClipBoard", mode=cb.Clipboard)
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Это измененная версия ответа @Martin Thoma для GTK3. Я обнаружил, что исходное решение привело к тому, что процесс не заканчивался, а мой терминал зависал, когда я вызывал script. Изменение script на следующее решение проблемы для меня.
#!/usr/bin/python3
from gi.repository import Gtk, Gdk
import sys
from time import sleep
class Hello(Gtk.Window):
def __init__(self):
super(Hello, self).__init__()
clipboardText = sys.argv[1]
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_text(clipboardText, -1)
clipboard.store()
def main():
Hello()
if __name__ == "__main__":
main()
Вероятно, вам захочется изменить, к какому клиенту будет привязан clipboardText, в этом script он назначен параметру, вызываемому с помощью script.
В новой установке ubuntu 16.04 я обнаружил, что мне пришлось установить пакет python-gobject
, чтобы он работал без ошибки импорта модуля.