Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法直接将python输出发送到剪贴板?_Python_Linux_Clipboard - Fatal编程技术网

有没有办法直接将python输出发送到剪贴板?

有没有办法直接将python输出发送到剪贴板?,python,linux,clipboard,Python,Linux,Clipboard,例如,如果python脚本将弹出一个字符串,给出一个新编写的文件的路径,我将在运行脚本后立即编辑该文件,那么最好将其直接发送到系统剪贴板,而不是STDOUT您可以使用外部程序: 使用xsel,您可以设置要处理的剪贴板 -p与主选择一起使用。这是点击中间的一个 -s与辅助选择一起使用。我不知道这是否还被使用 -b使用剪贴板选项。这是你的Ctrl+V1 阅读更多关于X的剪贴簿和 我创建了一个快速而肮脏的函数来处理这个问题: def paste(str, p=True, c=True):

例如,如果python脚本将弹出一个字符串,给出一个新编写的文件的路径,我将在运行脚本后立即编辑该文件,那么最好将其直接发送到系统剪贴板,而不是STDOUT

您可以使用外部程序:

使用
xsel
,您可以设置要处理的剪贴板

  • -p
    主选择一起使用。这是点击中间的一个
  • -s
    辅助选择一起使用。我不知道这是否还被使用
  • -b
    使用
    剪贴板
    选项。这是你的
    Ctrl+V
    1
阅读更多关于X的剪贴簿和

我创建了一个快速而肮脏的函数来处理这个问题:

def paste(str, p=True, c=True):
    from subprocess import Popen, PIPE

    if p:
        p = Popen(['xsel', '-pi'], stdin=PIPE)
        p.communicate(input=str)
    if c:
        p = Popen(['xsel', '-bi'], stdin=PIPE)
        p.communicate(input=str)

paste('Hello', False)    # pastes to CLIPBOARD only
paste('Hello', c=False)  # pastes to PRIMARY only
paste('Hello')           # pastes to both

您也可以尝试pyGTK的:


对于我来说,这与
Ctrl+V
选项一起工作。

这不是一个真正的Python问题,而是一个shell问题。通过将Python脚本的输出管道化到
xclip
命令中,您已经可以将Python脚本(或任何命令)的输出发送到剪贴板而不是标准输出

myscript.py | xclip
如果您的系统上尚未安装
xclip
(默认情况下并非如此),您可以通过以下方式获得:

sudo apt-get install xclip
如果您想直接从Python脚本执行此操作,我想您可以使用
os.system()
退出并运行xclip命令,这很简单,但不推荐使用。有很多方法可以做到这一点(请参阅
子流程
模块了解当前的官方方法)。您希望执行的命令类似于:

echo -n /path/goes/here | xclip

额外好处:在MacOSX下,您可以通过管道进入
pbcopy

来做同样的事情,正如其他人指出的,这不是“Python和电池”,因为它涉及GUI操作。因此它依赖于平台。如果您在windows上,则可以使用win32 Python模块并访问win32剪贴板操作。 我的建议是选择一个GUI工具包(PyQT/PySide用于QT,PyGTK用于GTK+或wxWidgets的wxPython)。然后使用剪贴板操作。如果你不需要沉重的工具包,那么就制作你的包装器,它将在windows和其他平台上使用win32软件包,并相应地进行切换

对于wxPython,以下是一些有用的链接:


正如另一篇文章所述,如果您想在python中解决这个问题,您可以使用它,它具有跨平台的额外好处

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

解决方案取决于操作系统,可以吗?@NullUserExceptionఠ_ఠ 我想是的,但我完全在Linux内部工作,所以我想为Linux提供一个解决方案。我测试了这个代码片段,但它似乎不适用于我的设置。在执行
python-overscript.py
之后,我在终端中用鼠标中键单击鼠标,但没有显示任何
Hello,World
。@nye17您正在尝试哪种方法?它是否会给您带来任何错误?第一个
剪贴板
无法工作,但没有报告任何错误。在大多数Linux系统中,有两个不同的剪贴板-单击鼠标中键和
ctrl+c
/
ctrl+v
剪贴板。检查另一个-中键单击剪贴板的管理级别低于GTK IIRC。第二个
xsel
也不起作用。可能是因为我的窗口管理器吗?我在Debian中的Xmoand下使用terminator。我更喜欢脚本指定的字符串被发送到剪贴板,而不是所有输出都通过管道传输到
xclip
,因为最终输出和所需字符串不一定相同。但是你是对的,我可以使用
子进程
将其发送到
xclip
,尽管我更喜欢一种稍微少一点“暴力”的方式。在python中这样做更好-允许代码有更多的输出,而不仅仅是一个文件名…添加一个命令行标志以抑制除路径名以外的所有内容,或者选择性地将其发送到标准错误(因此,您可以将其通过管道传输到
xclip
,而不捕获其余部分)。无论如何,您都需要一个命令行标志,因为您不想在没有明确告知的情况下重击用户的剪贴板,所以为什么不使其更单体化呢?@kindall这段时间我想要更多pythonic;-)不使用xclip的一个很好的理由是:您不必控制shell环境。我工作的云服务器都不提供xsel或xclip,因此更倾向于使用纯python解决方案。
echo -n /path/goes/here | xclip
>>> import pyperclip
>>> pyperclip.copy('The text to be copied to the clipboard.')
>>> pyperclip.paste()
'The text to be copied to the clipboard.'