@Papapapapaython

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonクリップボードにコピーコード

解決したいこと

指定したフォルダ内の画像ファイルをランダムで1つ選びコピーしたい

発生している問題・エラー

"ファイルのパスがクリップボードにコピーされました。"と出ているのに
画像をペーストしても何も起こらない

該当するソースコード

python

例)

import os
import random

def copy_random_file_to_clipboard(folder_path):
    # フォルダ内のファイル一覧を取得
    files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]

    # フォルダが空でないか確認
    if not files:
        print("フォルダが空です。")
        return

    # ランダムにファイルを選択
    selected_file = random.choice(files)

    # ファイルのパスを取得
    file_path = os.path.join(folder_path, selected_file)

    # Macの場合はpbcopyコマンドを使用してクリップボードにコピー
    os.system(f'pbcopy < "{file_path}"')

    print(f"ランダムに選択されたファイル: {selected_file}")
    print("ファイルのパスがクリップボードにコピーされました。")

# フォルダのパスを指定して関数を呼び出す例
folder_path = "/Users/shi/Documents/1"
copy_random_file_to_clipboard(folder_path)


自分で試したこと

上のコードを試したがペーストしても何も起こらない。

0 likes

1Answer

Macの場合はpbcopyコマンドを使用してクリップボードにコピー

pbcopyでクリップボードにコピーできるは、プレーンテキストかリッチテキストに限ると思います。

イメージデータをコピーできるimpbcopyコマンドのソースコードが、Githubに公開されていました。

gcc -Wall -g -O3 -ObjC -framework Foundation -framework AppKit -o impbcopy impbcopy.mでコンパイル&リンクすると書いてあります。
Xcodeのインストールが前提だと思いますが、試してはいません。

1Like

Comments

  1. gcc -Wall -g -O3 -ObjC -framework Foundation -framework AppKit -o impbcopy impbcopy.mでコンパイル&リンクすると書いてあります。

    その通りコンパイルできて、impbcopyコマンドが機能することを確認しました。
    使用したgccのバージョンは以下の通り。

    コマンド実行例
    $ gcc --version
    Apple clang version 15.0.0 (clang-1500.1.0.2.5)
    Target: arm64-apple-darwin23.2.0
    
    $ gcc -Wall -g -O3 -ObjC -framework Foundation -framework AppKit -o impbcopy impbcopy.m
    
    $ ./impbcopy
    Usage:
    
    Copy file to clipboard:
        ./impbcopy path/to/file
    
    Copy stdin to clipboard:
        cat /path/to/file | ./impbcopy - 
    
    $ ./impbcopy sample.png 
    $ ./impbcopy - <sample.png  
    $
    
  2. ありがとうございます。 パス名を変えてターミナルで実行したところ下のように出てきました。
    画像ファイルデータがコピーされていませんでした。
    ターミナルで実行するのが間違っているのでしょうか

    zsh: command not found: $
    zsh: number expected
    zsh: command not found: Target:
    zsh: command not found: $
    zsh: command not found: $
    zsh: command not found: Usage:
    zsh: command not found: Copy
    zsh: no such file or directory: ./impbcopy
    zsh: command not found: Copy
    zsh: no such file or directory: ./impbcopy
    cat: /Users/shi/Documents/1: Is a directory
    zsh: command not found: $
    zsh: no such file or directory: sample.png
    zsh: command not found: $

  3. $はコマンドプロンプトですから、
    コピーするなら、それ以降の文字列です。
    (zshなら%かも)

Your answer might help someone💌