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

标签 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 的东西?

最佳答案

对于 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 的问题.

关于Python - 使用子进程获取和设置剪贴板数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43860227/

相关文章:

python-3.x - Pytorch:ValueError:预期输入 batch_size (32) 以匹配目标 batch_size (64)

python - 日期的格式字符串在转换为十进制日和月时无效

python - 在后台将模块作为子进程启动,并分离

python - 具有合理默认值的必填字段

python - 使用压缩迭代器和条件的列表理解

python - 在 Google App Engine NDB 中按字符串选择列

google-cloud-platform - 使用 Google Cloud Platform 的本地开发服务器导入内置模块 "_subprocess"时出错

python - 无法在python中通过名称获取进程的PID

python - 为什么Python2.7 dict使用的空间比Python3 dict多?

python - 令人困惑的类型错误