Нужен способ загрузить файл изображения в буфер обмена Mac с помощью Python - PullRequest
3 голосов
/ 08 октября 2019

У меня есть программа на Python, которую я портирую на Mac. Мне нужно загрузить сохраненный файл изображения в буфер обмена, чтобы его можно было вставить в документ, используя cmd + v.

Это был ближайший поток к тому, что мне нужно , но решения нене работает, потому что мой путь к файлу osascript неизвестен. Это переменная, определенная в Python пользователем, и я борюсь с синтаксисом, необходимым для передачи переменной из Python в osascript.

Это не работает:

import subprocess


def imagepath():                               
    f=open('config.txt')
    line=f.readlines()
    inpath = (line[2])    
    print(inpath)
    return(inpath)

imagepath()

subprocess.run(["osascript", "-e", 'set the clipboard to (read (POSIX file  "+ str(inpath) + /tc.jpg") as JPEG picture)'])

печатает inpath как: / Users / admin / Desktop / PROGRAMMING, который является правильным путем, но это приводит к "ошибке выполнения: невозможно выполнитьфайл ": + str (inpath) +: tc.jpg" в файл типа. (-1700) "

Также не это:

import subprocess


def imagepath():                               
    f=open('config.txt')
    line=f.readlines()
    inpath = (line[2])    
    print(inpath)
    return(inpath)

imagepath()

subprocess.run(["osascript", "-e", 'set the clipboard to (read (POSIX file  """+ str(inpath) + /tc.jpg""") as JPEG picture)'])

В результате:" синтаксическая ошибка:Ожидаемый «,», но найденный «» ». (-2741) "

Следующее:

import subprocess


def imagepath():                                 # check line 1 of config file (screencap name)
    f=open('config.txt')
    line=f.readlines()
    inpath = (line[2])    # note: confusing.  0=line 1, 1=line2 etc.
    print(inpath)
    return(inpath)

imagepath()

subprocess.run(["osascript", "-e", 'set the clipboard to (read (POSIX file  ''' + str(inpath) + '''/tc.jpg") as JPEG picture)'])

Результат:" SyntaxError: EOF при сканировании строкового литерала в тройных кавычках "

Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: обновленный код ниже:



def imagepath():                                 # check line 1 of config file (screencap name)
    f=open('config.txt')
    line=f.readlines()
    inpath = line[2].strip('\n')
    print(inpath)
    return(inpath)

imagepath()

subprocess.run(["osascript", "-e", "set the clipboard to (read (POSIX file \"" + inpath  + "/tc.jpg\") as JPEG picture)" ])

Теперь возвращает: "NameError: имя 'inpath' не определено"

РЕДАКТИРОВАТЬ 2: Завершается без ошибок, но не удаетсязагрузить в буфер обмена.

import subprocess


def imagepath():                                 # check line 1 of config file (screencap name)
    f=open('config.txt')
    line=f.readlines()
    inpath = (line[2]).strip('\n')
    print(inpath)
    return(inpath)
    subprocess.run(
        ["osascript", "-e", "set the clipboard to (read (POSIX file \"" + inpath + "/tc.jpg\") as JPEG picture)"])
imagepath()

Это не возвращает ошибок и печатает правильный путь, но не добавляет файл в буфер обмена.

1 Ответ

1 голос
/ 08 октября 2019

Возможно, у вас есть перевод строки в конце вашей строки inpath, поэтому попробуйте:

inpath = line[2].strip('\n')

Тогда вам нужно:

subprocess.run(["osascript", "-e", "set the clipboard to (read (POSIX file \"" + inpath  + "/tc.jpg\") as JPEG picture)" ])
...