web-dev-qa-db-ja.com

python出力をクリップボードに直接送信する方法はありますか?

たとえば、pythonスクリプトが、スクリプトの実行直後に編集する、新しく書き込まれたファイルのパスを示す文字列を吐き出す場合、それがあれば非常に便利です。 STDOUTではなく、システムクリップボードに直接送信されます。

19
nye17

外部プログラムを使用できます xsel

from subprocess import Popen, PIPE
p = Popen(['xsel','-pi'], stdin=PIPE)
p.communicate(input='Hello, World')

xselを使用すると、作業するクリップボードを設定できます。

  • -pPRIMARY選択で機能します。それはミドルクリックです。
  • -sSECONDARY選択で機能します。これがもう使われているかどうかはわかりません。
  • -bCLIPBOARD選択で機能します。それはあなたのCtrl + Vのものです。

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を試すこともできます clipboard

import pygtk
pygtk.require('2.0')
import gtk

clipboard = gtk.clipboard_get()

clipboard.set_text('Hello, World')
clipboard.store()

これは、私にとってはCtrl + V選択で機能します。

26

これは実際にはPythonの質問ではなく、シェルの質問です。Pythonスクリプト(または任意のコマンド)の出力を、代わりにクリップボードに送信できます。 Pythonスクリプトの出力をxclipコマンドにパイプすることによって標準出力。

_myscript.py | xclip
_

xclipがまだシステムにインストールされていない場合(デフォルトではインストールされていません)、次のようにして取得します。

_Sudo apt-get install xclip
_

Pythonスクリプトから直接実行したい場合は、os.system()を使用してxclipコマンドをシェルアウトして実行できると思います。これは単純ですが、非推奨です。これを行う方法(現在の公式の方法については、subprocessモジュールを参照してください)。実行するコマンドは次のようなものです。

_echo -n /path/goes/here | xclip
_

ボーナス:Mac OS Xでは、pbcopyにパイプすることで同じことができます。

8
kindall

別の answer に投稿されたので、Python内でそれを解決したい場合は、 Pyperclip を使用できます。これには、クロスプラットフォームであるという追加の利点があります。

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

他の人が指摘しているように、これはGUI操作を伴うため、「Pythonとバッテリー」ではありません。したがって、プラットフォームに依存します。 Windowsを使用している場合は、win32 PythonモジュールおよびAccesswin32クリップボード操作を使用できます。ただし、1つのGUIツールキット(QTの場合はPyQT/PySide、GTK +の場合はPyGTK、wxWidgetsの場合はwxPython)を選択することをお勧めします。 )次にクリップボード操作を使用します。ツールキットのような重いものが必要ない場合は、Windowsや他のプラットフォームで利用可能なものでwin32パッケージを使用するラッパーを作成し、それに応じて切り替えます。

WxPythonの場合、ここにいくつかの役立つリンクがあります。

http://www.wxpython.org/docs/api/wx.Clipboard-class.html

http://wiki.wxpython.org/ClipBoard

http://www.python-forum.org/pythonforum/viewtopic.php?f=1&t=25549

2
Stefano Mtangoo