2017-05-09 2 views
2

Ich habe vor kurzem von this post eine Möglichkeit zum Abrufen und Festlegen von Zwischenablagedaten in Python über Subprozesse gefunden, die genau das ist, was ich für mein Projekt brauche.Python - Abrufen und Einstellen von Zwischenablagedaten mit Subprozessen

import subprocess 

def getClipboardData(): 
    p = subprocess.Popen(['pbpaste'], stdout=subprocess.PIPE) 
    retcode = p.wait() 
    data = p.stdout.read() 
    return data 

def setClipboardData(data): 
    p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE) 
    p.stdin.write(data) 
    p.stdin.close() 
    retcode = p.wait() 

Allerdings scheint es nur auf dem OS X-Betriebssystem zu funktionieren. Wie kann ich diese Funktionalität zwischen Windows, Mac und Linux wiederherstellen?

UPDATE

meinen ursprünglichen Code verwenden und die Windows-Lösung bigbounty zur Verfügung gestellt, ich denke, ich brauche nur eine Lösung für Linux jetzt. Vielleicht etwas mit xclip oder xsel?

Antwort

1

Für Linux Sie Ihren ursprünglichen Code mit dem xclip Dienstprogramm statt pbpaste/pbcopy verwenden:

import subprocess 

def getClipboardData(): 
    p = subprocess.Popen(['xclip','-selection', 'clipboard', '-o'], stdout=subprocess.PIPE) 
    retcode = p.wait() 
    data = p.stdout.read() 
    return data 

def setClipboardData(data): 
    p = subprocess.Popen(['xclip','-selection','clipboard'], stdin=subprocess.PIPE) 
    p.stdin.write(data) 
    p.stdin.close() 
    retcode = p.wait() 

xclip 's Parameter:

  • -selection clipboard: betreibt über die Zwischenablage Auswahl (X Window haben mehrere "clipboards"
  • -o:

Sie sollten von den gewünschten Auswahl lesen feststellen, dass diese Lösung über binary data arbeitet. Um einen String zu speichern können Sie:

setClipboardData('foo'.encode()) 

Und schließlich, wenn Sie bereit sind, Ihr Programm in einer Shell-Rohrleitungen verwenden, um meine Frage zu einem issue aussehen.

+0

Danke für Ihre Antwort, aber ich habe bereits eine alternative Methode zur Lösung meines Problems gefunden. –

0

Für Fenster,

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 

Einzel Bibliothek auf allen Plattformen - http://coffeeghost.net/2010/10/09/pyperclip-a-cross-platform-clipboard-module-for-python/

+0

Ich schaute früher auf pyperclip. Hat dies immer noch die gleichen Funktionen wie win32, oder ist es nur auf das Kopieren und Einfügen von Strings beschränkt? –

+0

Ich habe es nicht wirklich versucht.Aber ich fand die Idee interessant – bigbounty

+0

Nur überprüft den Quellcode. Nur Funktionen sind 'copy()' und 'paste()' –

Verwandte Themen