Python - 使用子进程获取和设置剪贴板数据

时间:2017-05-09 02:48:21

标签: python python-3.x subprocess clipboard multiplatform

我最近从this post发现了一种通过子进程在python中获取和设置剪贴板数据的方法,这正是我对项目所需要的。

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()

然而,它似乎只适用于OS X操作系统。如何在windows,mac和linux中重新创建此功能?

更新

使用我的原始代码和bigbounty提供的windows解决方案,我想我现在只需要一个Linux解决方案。也许利用xclip或xsel的东西?

2 个答案:

答案 0 :(得分:5)

对于Linux,您可以使用xclip实用程序代替pbpaste / pbcopy来使用原始代码:

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的参数:

  • -selection clipboard:对剪贴板选择进行操作(X Window有多个“clipboards
  • -o:从所需的选择中读取

您应该注意到此解决方案的运行时间超过binary data。要存储字符串,您可以使用:

setClipboardData('foo'.encode())

最后如果您愿意在shell管道中使用您的程序,请查看我关于issue的问题。

答案 1 :(得分:0)

对于Windows,

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

所有平台上的单个图书馆 - http://coffeeghost.net/2010/10/09/pyperclip-a-cross-platform-clipboard-module-for-python/