python в applecript: subprocess.call против os.system в автоматоре - PullRequest
0 голосов
/ 16 октября 2011

Я нашел обходной путь при вызове сценария python из сценария оболочки из automator (версия 2.1.1 в mac os x 10.6.8) (python 2.6.1). Моя проблема в том, что os.system ("mkdir foo") работает в (очень специфическом) случае, когда subprocess.call ("mkdir foo") также делает каталог , но затем заставляет automator выдавать ошибку.

Цель моего приложения-автоматизатора - принять перетаскиваемое на него изображение. Приложение automator имеет только одно действие: «запустить скрипт оболочки» со следующим кодом:

for f in "$@"
do
    python dphoto_pythons/uploader.py $f > dphoto_pythons/auto_output.txt
done

$ f - имя перетаскиваемого изображения. («Запуск сценария оболочки» настроен на передачу ввода в качестве аргументов.) Вот странная часть:

в скрипте uploader.py я звонил так:

retcode=call("mkdir " + dir_full, shell=True) # THIS CAUSES A ERROR IN AUTOMATOR
print "***DOESN'T GET HERE WHEN RUN IN AUTOMATOR****"

Это делает каталог. но не доходит до следующего утверждения. А автоматор выдаст диалоговое окно с сообщением об ошибке (которое просто говорит, что я должен проверить свой скрипт).

Напротив, если я вызвал uploader.py «вручную» из терминала:

"python uploader.py someimage.jpg"

это работало без заминок. Немного подумав, я попытался заменить call на os.system:

os.system("mkdir " + stu_dir_full)
####retcode=call("mkdir " + stu_dir_full, shell=True) #  BUG

Это работает с автомата и с терминала. У меня такое ощущение, что я упускаю из виду нечто очевидное, потому что это такая странная проблема. Но я подумал, что в любом случае это произойдет. Есть мысли?

-Mel

1 Ответ

0 голосов
/ 17 октября 2011

Вы можете использовать os.mkdir (stu_dir_full) ...

Но проблема с вашей строкой subprocess.call может заключаться в том, что subprocess.call ожидает список, а не строку. Попробуйте это:

retcode = call(["mkdir",dir_full], shell=True)
...