如何在Mac应用程序中传递命令行参数

时间:2012-05-17 08:11:24

标签: objective-c xcode macos command-line-arguments

我已经创建了一个命令行工具应用程序(Xocde - > New App - >命令行工具)并且它的运行没有任何问题, 现在我想通过终端运行它并传递一些命令行参数,类似这样的

int main(int argc, const char * argv[])
{

    std::cout << "got "<<argc<<" arguments";

    for ( int i = 0; i<argc;i++){
        std::cout << "argument:"<<i<<"= "<<argv[i];
    }

//// some other piece of code 
}

如果我在终端上输入

>open VisiMacXsltConverter --args fdafsdfasf i am getting output 

got 1 argumentsargument:0= /Applications/VisiMacXsltConverte

我想通过命令行知道传递参数的方法是什么

2 个答案:

答案 0 :(得分:3)

如果你只使用一个 - (连字符),这些值将进入一个易变的UserDefaults字典(在整个过程的生命周期中也会覆盖其他键)。

./program -Param 4

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSLog(@"param = %@", [[NSUserDefaults standardUserDefaults] valueForKey:@"Param"]);        
    }
    return 0;
}

或者您可以根据需要传递这些内容,并使用以下内容为您提供NSStrings的NSArray。

[[NSProcessInfo processInfo] arguments];

答案 1 :(得分:1)

为什么要用打开来运行它?

我会用它来运行它(如果你有你的$ PATH你应该省略'./'):

./VisiMacXsltConverter arg1 arg2 arg3 arg4

希望我没有误解你的问题。