Как передать пути к скрипту Python, «сбросив» файлы / папки поверх иконки скрипта - PullRequest
7 голосов
/ 18 ноября 2011

Я работаю в Mac OS X и пишу простые сценарии копирования файлов / папок на Python.Можно ли перетащить папку поверх значка сценария Python и передать путь к файлу или папке в качестве аргумента в сценарии?

В настоящее время у меня есть капля AppleScript (которая поддерживает перетаскивание) который передает пути удаленных папок и файлов в Python.Однако я хотел бы иметь только один скрипт Python вместо AppleScript и Python.

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

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

Просто используйте утилиту «Сборка апплета»:

/Developer/Applications/Utilities/MacPython\ 2.5/Build\ Applet.app

и пути к удаленным файлам будут доступны через sys.argv.

Обратите внимание, что вам, возможно, придется использовать Python2.5 (или исправленную версию) - Смотрите эту заметку: https://bitbucket.org/ronaldoussoren/py2app/issue/16/argv-emulation-code-needs-rewrite

Быстрый пример - отредактируйте этот файл и поместите его на рабочий стол:

#!/usr/bin/python2.5
import sys
print sys.argv

Нажмите на него, удерживая клавишу Control, и выберите «Открыть» с помощью «Build Applet (2.5.4)»

Значок приложения появится на рабочем столе.

Открыть консольную утилиту и очистить дисплей.

Перетащите некоторые файлы на значок приложения - вы увидите печать в окне консоли.

1 голос
/ 18 ноября 2011

Что вам действительно может понравиться, так это Mac OS Services. Это рабочие процессы Automator, которые можно легко интегрировать в операционную систему в зависимости от контекста: например, вы можете сделать так, чтобы ваш скрипт появлялся в контекстном меню Finder при выборе папки.

Вы можете сделать сервис из скрипта Python следующим образом:

  1. Откройте Automator.app и создайте новый Сервис;
  2. В верхней части блока рабочего процесса вы выбираете, какой тип ввода ожидает ваше приложение (папки, по вашему выбору, если я правильно понимаю);
  3. Перетащите блок «Run Shell Script» из левой панели в рабочий процесс;
  4. Теперь вы можете использовать оболочку bash по умолчанию (/bin/bash) для вызова вашего скрипта: /full/path/to/your/python /full/path/to/your/script.py $@

  5. Или используйте /usr/bin/python (Python по умолчанию) и вставьте свой код прямо в текстовый блок;

  6. Не забудьте установить Pass input: as arguments в правом верхнем углу блока.

Немного сложно отлаживать такие рабочие процессы (так как вы не увидите stdout & stderr). Возможный обходной путь для отладки - настроить пользовательский excepthook и вывести все исключения в какой-нибудь простой текстовый файл:

import sys, traceback

def excepthook(type, exc, tb):
    with open("error.log", "a") as f:
        traceback.print_exc(file=f)

sys.excepthook = excepthook
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...