Принятие аргументов с Какао и запуск системных команд - PullRequest
2 голосов
/ 15 декабря 2011

Я новичок в Какао и Xcode, но я действительно хочу учиться. Проблема в том, что я трачу много времени на работу над языками сценариев, такими как PHP, perl, python и shell-скрипты, и хотя Cocoa намного более мощная, чем запуск скрипта оболочки в Terminal на OS X, она также немного сложнее попасть.

У меня есть гипотеза: если я смогу начать использовать Какао и Xcode, чтобы на самом деле сделать что-то, я буду чувствовать себя более комфортно и постепенно начну раскрывать все больше и больше его потенциала.

Вот где, я надеюсь, приходит StackOverflow. Видите, я привык писать сценарии, которые принимают в качестве входных данных параметры (в основном имена файлов) и действуют на них - либо отправляя другие программы, либо читая и записывая текстовое содержимое. , Имея это в виду, Как мне написать простое приложение Какао, которое будет принимать ввод, сохранять его в файл и запускать системную команду?

Желаемый ввод:

open -a MyApp.app --args "hello world"

Желаемый вывод:

  • Файл /tmp/test.txt создан и теперь содержит текст hello world
  • Версия php проверяется путем запуска /usr/bin/php -v, а затем вывод добавляется к /tmp/test.txt (просто требуется вызвать некоторую системную команду)

Я знаю, что такого рода вещи очень легко сделать с помощью всего лишь 1-2 строк чего-то вроде скриптов bash, но мне бы очень хотелось посмотреть, смогу ли я добиться этого в приложении Какао. Я заранее прошу прощения, потому что я понимаю, что это очень большой вопрос - просто попытаться начать таким образом, который кажется вам знакомым.

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Если вы хотите обрабатывать аргументы командной строки и иметь графический интерфейс, вам определенно стоит взглянуть на NSProcessInfo .Среди прочего, у него есть метод с именем arguments, который возвращает аргументы командной строки в виде NSArray.

. Он также может дать вам NSDictionary переменных среды, что также может быть очень полезным.из метода environment.

Редактировать: Я забыл упомянуть, если вы хотите сохранить содержимое строки в файл, NSString уже имеет метод для этого!Посмотрите документы для writeToFile:atomically:encoding:error:.

1 голос
/ 15 декабря 2011

Если вы пишете приложение типа ввода / вывода, которое не имеет пользовательского интерфейса, просто напишите простое приложение в стиле Unix на C / C ++ / Objective-C (в зависимости от того, что вы предпочитаете).Аргументы вашей программы будут отображаться в параметрах argc и argv, которые передаются вашей функции main:

int main(int argc, char **argv)
{
    // argc is the total number of arguments (including the program name)
    // argv[0] is the first argument (the program name)
    // argv[1] is the second argument (first real argument)
    // ...
    // argv[argc-1] is the last argument
}

Если у вас есть настоящий пользовательский интерфейс, обычно функция mainавтоматически генерируется Xcode и помещается в файл с именем main.m - это функция-заглушка, которая вызывает NSApplicationMain с пулом автоматического выпуска.Вы можете изменить это, чтобы сохранить argc и argv и / или обработать их прямо здесь.

...