2016-02-18 2 views
0

Я использую решение, описанное в here, для вызова инструмента командной строки из моего приложения Swift, но всегда получаю сообщение об ошибке для файла, который я даю в качестве аргумента. Если я просто скопирую полную строку вызова в терминал, она работает просто отлично.Вызов оболочки из быстрого приложения с аргументами

Моя первая мысль заключалась в том, что это может быть связано с пробелами в пути к файлу, но это не имеет значения. Поскольку ответ исходит от самого инструмента, а не от оболочки, вызов, похоже, в порядке. Путь, который я использую в качестве аргумента, связан с файлом, вложенным в приложение из поисковика.

вызовов от Swift:

self.shell("/Applications/AtomicParsley","'\(FileURLLabel.stringValue)'","--artwork REMOVE_ALL --overWrite") 

Ответ в консоли:

AP error trying to fopen '/Users/Tom/Downloads/Test file.m4v': No such file or directory 
AtomicParsley error: can't open '/Users/Tom/Downloads/Test file.m4v' for reading: No such file or directory 
+0

Можете ли вы попытаться создать командные строки в переменной и напечатать эту переменную с помощью 'print' и посмотреть, что она печатает? Вы можете использовать двойные кавычки вместо одиночных кавычек для включения имени файла? –

+0

Угадайся и расплывчатые идеи здесь, но ... может быть, просто передать stringValue недостаточно хорошо? Возможно, вы могли бы попытаться создать NSURL из своего строкового значения, возможно, даже «let url = NSURL (fileURLWithPath: FileURLLabel.stringValue)». А затем используйте 'absoluteString' или' path' вашего нового объекта 'url'. (вы можете подробнее узнать о различиях здесь: http://stackoverflow.com/questions/16176911/nsurl-path-vs-absolutestring). Надеюсь, это имеет смысл и не ведет вас в неправильном направлении – pbodsk

ответ

0

Спасибо, pbodsk, используя path из NSURL было решение. Кроме того, я должен был использовать строковые константы, а не только литералы для других параметров, а также при вызове оболочки. Большое спасибо!

Смежные вопросы