Назначение переменных командному сценарию в Automator

Итак, я новичок в использовании Automator на OSX.

у меня есть очень простая функция python

def test(input1,input2,output):
    print str(input1)
    print str(input2)
    print str(output)
    return 'function works'

то, что я хочу сделать, это создать простое приложение, которое запрашивает расположение файлов двух входов и место назначения файла для вывода (текстовое поле имени для вывода).

поэтому я возился с: Automator> Выберите рабочий процесс> Действия> Файлы и папки> Запросить элементы Finder (создайте два из них)> Утилиты> Запустить сценарий оболочки

Итак, у меня три вопроса:

<сильный>1 . Как я могу назначить эти элементы поиска переменным input1, input2 соответственно в моем скрипте Python?

2 . Где я могу разместить свой сценарий рядом с этим кодом?

import sys

for f in sys.stdin:
    print f,

3 . В чем разница между stdin, arguments ?


person O.rka    schedule 18.03.2013    source источник


Ответы (2)


Полный рабочий процесс должен быть примерно таким:

введите здесь описание изображения

На шаге Run Shell Script вы должны установить Pass Input: в as arguments, чтобы вы могли использовать массив sys.args. Ваш скрипт Python можно изменить следующим образом:

import sys

input1 = sys.argv[1]
input2 = sys.argv[2]
output = sys.argv[3]
print input1
print input2
print output

View Results шаг предназначен только для отладки.

Если вы установите Pass Input: на to stdin, входные аргументы передаются вашему скрипту через конвейер.

person Riccardo Marotti    schedule 18.03.2013
comment
я не могу заставить его создать выходной файл. в Finder & Folders нет ничего, что могло бы создать новый файл, который я вижу. . . Кроме того, я не могу заставить его печатать возвращаемые данные. я перетащил результаты просмотра после запуска сценария оболочки, и это не сработало, когда я запустил приложение (не в автоматизаторе) - person O.rka; 18.03.2013

Вы можете просто использовать AppleScript:

set inputA to (choose file with prompt "Please choose file one...")
set inputB to (choose file with prompt "Please choose file two…")
set outputA to (choose folder with prompt "Please choose a destination…")

return {((inputA as text) & return & inputB as text) & return & outputA}
person adayzdone    schedule 18.03.2013