Я установил гем Ruby 'haml' на своем Mac, который я могу использовать для компиляции файлов haml в html-файлы, используя следующую команду на терминале:
haml 'path/to/haml/file.haml' 'desired/html/path/file.html'
Эта команда просто создаетHTML-файл по второму пути, и не выдает в терминале.Например, эта команда:
haml "/Volumes/Macintosh HD/Users/me/Sites/ICSP/sugar.haml" "/Volumes/Macintosh HD/Users/me/Sites/ICSP/sugar.html"
Создает файл sugar.html по указанному пути.Сейчас я пытаюсь использовать эту функциональность из скрипта Python.Когда я набираю это в интерактивной оболочке Python IDLE:
>>>import subprocess
>>>subprocess.Popen('haml "/Volumes/Macintosh HD/Users/me/Sites/ICSP/sugar.haml" "/Volumes/Macintosh HD/Users/me/Sites/ICSP/sugar.html"', shell=True, executable='/bin/bash')
<subprocess.Popen object at 0x159d6f0>
, я получаю вывод о том, что процесс был запущен, однако файл не выводится.Почему это происходит?Я даже ввел аргумент Shell, но никакой интерактивной оболочки не появляется.Кроме того, я где-то читал, что используемой оболочкой по умолчанию является не bash, а именно то, что использует терминал Mac, поэтому я добавил это слишком хорошо.
Следуя совету icktoofay, я запустил check_call.Вот трассировка, которую я получил:
Трассировка (последний последний вызов):
Файл "/Users/neil/Desktop/subprocesstest.py", строка 7, в p = subprocess.check_call(x, shell = True) Файл "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", строка 504, в check_call вызывает CalledProcessError (retcode, cmd) CalledProcessError: Command 'haml"/ Volumes / Macintosh HD / Пользователи / neil / Sites / ICSP / sugar.haml" "/ Volumes / Macintosh HD / Пользователи / neil / Sites / ICSP / sugar.html" 'возвратили ненулевой статус выхода 127
Согласно справочному руководству bash при поиске команды для выполнения,
Если имя не является ни функцией оболочки, ни встроенным, и содержитбез косой черты, Bash ищет в каждом элементе $ PATH каталог, содержащий исполняемый файл с таким именем.... Если эта функция не определена, оболочка печатает сообщение об ошибке и возвращает состояние завершения 127.
Однако я подумал, что действительно нашел команду haml после добавления оболочки и исполняемого файлааргументы, потому что до этого он выдавал «файл или каталог не найден», что указывает на то, что функция выполняется не напрямую, а только в оболочке.
Теперь, как мне заставить python найти эту команду haml?Или я должен был бы использовать какой-то уродливый обходной путь, такой как appleScript, который затем вызывает команду haml.