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

Dej*_*oop 7 python clipboard subprocess multiplatform python-3.x

我最近从这篇文章中发现了一种通过子进程在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()
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

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

mgl*_*art 6

对于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()
Run Code Online (Sandbox Code Playgroud)

xclip参数:

  • -selection clipboard:操作剪贴板选择(X Window有多个" 剪贴板 ")
  • -o:从所需的选择中读取

您应该注意到此解决方案对二进制数据进行操作.要存储字符串,您可以使用:

setClipboardData('foo'.encode())
Run Code Online (Sandbox Code Playgroud)

最后一点,如果你愿意使用shell管道内你的程序看看我的问题有关的问题.