我想要一个与命令行工具open(1)
相当的Cocoa,特别是对于这种形式的用法:
open -a <SomeApplication> <SomeFile> --args <Arg1> <Arg2> ...
以QuickTime为例。以下命令行将使用QuickTime打开文件,参数可以控制QuickTime是否在启动时播放该文件。
open -a "QuickTime Player" a.mp4 --args -MGPlayMovieOnOpen 0 # or 1
我看过Launching an Mac App with Objective-C/Cocoa。我认为等同于open -a <App> <File>
的{{3}}在我没有指定任何参数时效果很好。我认为等同于open -a <App> --args <Arg1> <Arg2> ...
的{{3}}在我没有指定任何要打开的文件时效果很好。但是两者都不能同时指定文件名和参数。
我还尝试将文件名附加到参数列表中,这是unix程序使用的常用方法。似乎有些应用程序可以接受它,但有些应用程序不能接受它。 QuickTime会提示错误,指出无法打开文件。我使用以下代码。
NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSURL *url = [NSURL fileURLWithPath:[workspace fullPathForApplication:@"QuickTime Player"]];
NSArray *arguments = [NSArray arrayWithObjects:@"-MGPlayMovieOnOpen", @"0", @"a.mp4", nil];
[workspace launchApplicationAtURL:url options:0 configuration:[NSDictionary dictionaryWithObject:arguments forKey:NSWorkspaceLaunchConfigurationArguments] error:nil];
// open -a "QuickTime Player" --args -MGPlayMovieOnOpen 0 a.mp4
打开文件中的机制似乎与通常的参数不同。任何人都可以解释open(1)
的内部,或者只是给我一个解决方案吗?感谢。
答案 0 :(得分:3)
您可能希望管道任务的输出,以便了解结果。 “a.mp4”需要是文件的完整路径。
NSArray *args = [NSArray arrayWithObjects:@"-a", @"QuickTime Player", @"--args", @"a.mp4", nil];
NSTask *task = [NSTask new];
[task setLaunchPath:@"/usr/bin/open"];
[task setArguments:args];
[task launch];