我只需要一个python脚本,复制文本到剪贴板。

脚本执行后,我需要文本的输出被粘贴到另一个源。 是否有可能编写一个python脚本来完成这项工作?


当前回答

在macOS上,使用subprocess.run将你的文本管道到pbcopy:

import subprocess 
data = "hello world"
subprocess.run("pbcopy", text=True, input=data)

它将“hello world”复制到剪贴板。

其他回答

看到Pyperclip。示例(摘自Pyperclip网站):

import pyperclip
pyperclip.copy('The text to be copied to the clipboard.')
spam = pyperclip.paste()

另外,请参阅施乐公司。但它似乎有更多的依赖性。

这是@Martin Thoma对GTK3的回答的修改版本。我发现原来的解决方案导致过程永远不会结束,当我调用脚本时,我的终端挂起。将脚本更改为以下内容为我解决了这个问题。

#!/usr/bin/python3

from gi.repository import Gtk, Gdk
import sys
from time import sleep

class Hello(Gtk.Window):

    def __init__(self):
        super(Hello, self).__init__()
        
        clipboardText = sys.argv[1]
        clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        clipboard.set_text(clipboardText, -1)
        clipboard.store()


def main():
    Hello()
    
    

if __name__ == "__main__":
    main()

你可能想要改变clipboardText被赋值的对象,在这个脚本中,它被赋值给调用脚本的参数。

在一个新的ubuntu 16.04安装中,我发现我必须安装python-gobject包才能使它正常工作而不会出现模块导入错误。

GTK3:

#!/usr/bin/python3

from gi.repository import Gtk, Gdk


class Hello(Gtk.Window):

    def __init__(self):
        super(Hello, self).__init__()
        clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        clipboard.set_text("hello world", -1)
        Gtk.main_quit()


def main():
    Hello()
    Gtk.main()

if __name__ == "__main__":
    main()

要使用本机Python目录,请使用:

import subprocess

def copy2clip(txt):
    cmd='echo '+txt.strip()+'|clip'
    return subprocess.check_call(cmd, shell=True)

而在Mac上:

import subprocess

def copy2clip(txt):
    cmd='echo '+txt.strip()+'|pbcopy'
    return subprocess.check_call(cmd, shell=True)

然后使用:

copy2clip('This is on my clipboard!')

调用函数。

在macOS上,使用subprocess.run将你的文本管道到pbcopy:

import subprocess 
data = "hello world"
subprocess.run("pbcopy", text=True, input=data)

它将“hello world”复制到剪贴板。