クリップボードにテキストをコピーする + subprocess

     今日会社で、Python上でテキストのクリップボードへのコピーをするには?って話しになりました。
     本当だったらwin32appを使用するといいんでしょうが、それをインストールできない環境の場合もあるんで、Pythonのみでやるにはどうしたらいいかって話しで、結局以下のような方法になりました。

    import subprocess
    
    def copyToClipboard( text ):
        try:
            p = subprocess.Popen( ['clip'], stdin=subprocess.PIPE, shell=True )
            p.stdin.write( text )
            p.stdin.close()
    
            retcode = p.wait()
            return True
        except Exception, inst:
            return False

    ↓のサイトを参考にさせて頂きました。ありがとうございます。
    http://d.hatena.ne.jp/foo9/20100810/1281416573

     さて、これでPython上で任意の文字列をクリップボードにコピーできるようになりました。
     で、仕組みはと言うと用は引数textをwindowsに付属するclip.exeを介してclipboardに送るというシンプルなもの。
     因みにclip.exeはwindows server2003以降またはwindowsVista以降じゃないと標準では付属しないので、XPユーザーはどっかから落としてきてやる必要があります。

     と、まぁここまでは特に言うことないのですが、上記スクリプトで使用したsubprocessと言うのを今更ながら知りました。
     このsubprocessはMELで言うところの「system」に近い存在で、要はPython上からWindowsのDOS(Linuxの場合はシェル)にアクセスするための機能に該当するそうです。
     Pythonではもともとosモジュールのos.system、os.popen、Unix系限定のcommandなどがありますが、version2.4以降これらに置き換わる存在として登場したのがこのsubprocessモジュールであるとリファレンスには書いてます。

     例えばPythonからコマンドプロンプトを開くなら
    p = subprocess.Popen( ['cmd.exe'] )
    でOK。
     最初の引数はリストになっており、2個目、3個目に実行したいコマンドの引数を入れてやれるみたいです。Explorerでcmd.exeを選択した状態で開きたい場合の例
    p=subprocess.Popen( ['explorer', '/select,C:\\Windows\\System32\\cmd.exe'] )

     よくMayaから外部ソフトに渡すとためにコマンドを文字列として生成するのが非常に面倒だったんですが、これなら引数と値をどんどん配列に入れていくだけだから物凄く簡単ですね。

     今後はos.systemとかは封印してコッチを使おう
    スポンサーサイト

    コメントの投稿

    非公開コメント

    No title

    communicateメソッドつかたほうがいいですよ

    Communicate!

     返信が遅くなってスイマセン、アドバイスありがとうございます!

     なるほどcommunicateメソッドですか。その存在自体始めて知りました(ちゃんとマニュアルに載ってたんですね)、感謝です!
     まだイマイチ仕組みを理解してないのですが(汗)、もうちょっとググって勉强してみたいと思います!!
    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココのメールアドレスからご連絡できますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR