2017-05-09 42 views
2

我最近从this post中发现了一种通过子流程获取和设置python剪贴板数据的方法,这正是我需要的项目。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上重新创建这个功能?

UPDATE

用我的原代码和提供的解决方案的窗口bigbounty,我想我只需要为Linux的解决方案了。也许是利用xclip或xsel的东西?

回答

1

对于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窗口有多个 “clipboards
  • -o:从期望的选择

读你应该注意到,该方案工作在binary data。要存储一个字符串,你可以使用:

setClipboardData('foo'.encode()) 

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

+0

感谢您的回答,但是我已经找到了解决我的问题的另一种方法。 –

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/

+0

我早些时候看过pyperclip。这是否仍然具有与win32相同的get和set功能,还是仅限于复制和粘贴字符串? –

+0

我还没有尝试过,但我发现这个想法很有趣 – bigbounty

+0

刚刚检查了源代码。只有函数是'copy()'和'paste()' –