Как передать имена путей в сценарий Python путем «удаления» файлов / папок с помощью значка сценария

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

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

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

2 Solutions collect form web for “Как передать имена путей в сценарий Python путем «удаления» файлов / папок с помощью значка сценария”

Просто используйте утилиту «Build Applet»:

/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 

Щелкните по нему правой кнопкой мыши и выберите «Открыть апплет» (2.5.4)

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

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

Отбросьте некоторые файлы на значок приложения – вы увидите печать в окне консоли.

Что вам может действительно понравиться – это 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 для отладки является настройка пользовательского excepthook и вывод всех исключений в некоторый простой текстовый файл:

 import sys, traceback def excepthook(type, exc, tb): with open("error.log", "a") as f: traceback.print_exc(file=f) sys.excepthook = excepthook 
  • Запуск Mercurial на Mavericks
  • установка MySQLdb для Python 2.6 на OSX
  • Почему я получаю ложный символ «] в сообщениях syslog с SysLogHandler Python в OS X?
  • Полноразмерный словарь / тезаурус
  • Построение Python 3 в OS X: Ошибка 133
  • pip3 install pyautogui не работает с кодом ошибки 1 Mac OS
  • Путь Python в .bash_profile не соблюдается
  • Что такое контрольная сумма get-pip.py? Где я могу это получить?
  • Python - лучший язык программирования в мире.