接受Cocoa的参数并运行系统命令

时间:2011-12-15 03:09:05

标签: xcode macos cocoa osx-snow-leopard osx-lion

我是Cocoa和Xcode的新手,但我确实想学习。问题是我花了很多时间在PHP,perl,python和shell脚本等脚本语言上工作,而Cocoa比在OS X上的Terminal中运行shell脚本要强大得多,它也是一个有点难以进入。

我有一个假设:如果我可以开始使用Cocoa和Xcode来实际做一些事情,那么我会更加熟悉它并逐渐开始解锁它的潜力。

这就是我希望StackOverflow进来的地方。看,我习惯于编写以参数(通常是文件名)作为输入的脚本,并对它们采取行动 - 调度其他程序或读取和写入基于文本的内容。所以考虑到这一点,如何编写一个简单的Cocoa应用程序来接受输入,将该输入保存到文件中,然后启动系统命令?

期望的输入:

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

期望的输出:

  • 文件/tmp/test.txt已创建,现在包含文字hello world
  • 运行/usr/bin/php -v检查php版本,然后将输出附加到/tmp/test.txt(只是想调用一些系统命令)

我知道这种事情很容易用1-2行像bash脚本一样,但我真的很想看看我是否可以在Cocoa应用程序中实现这一点。我提前道歉,因为我意识到这是一个非常小的问题 - 只是试着以一种熟悉的方式开始。

2 个答案:

答案 0 :(得分:1)

如果您正在编写一个没有UI的纯输入/输出类型的应用程序,只需在C / C ++ / Objective-C中编写一个直接的Unix风格的应用程序(无论您喜欢哪个)。您的程序的参数将显示在传递给argc函数的argvmain参数中:

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
}

如果你有一个真正的用户界面,通常{X}会自动生成main函数并将其放在名为main.m的文件中 - 它是一个使用自动释放池调用NSApplicationMain的存根函数周围。您可以修改此项以保存argcargv和/或直接处理它们。

答案 1 :(得分:1)

如果您想处理命令行参数并拥有GUI,那么您肯定希望查看NSProcessInfo。除此之外,它还有一个名为arguments的方法,它将命令行参数作为NSArray返回。

它还可以从NSDictionary方法为您提供environment个环境变量,这些变量也非常有用。

编辑:我忘了提及,如果你想将字符串的内容保存到文件,NSString已经有了一个方法!查看writeToFile:atomically:encoding:error:的文档。