5

open(1)特にこの形式での使用には、コマンドラインツールと同等のCocoaが必要です。

open -a <SomeApplication> <SomeFile> --args <Arg1> <Arg2> ...

例としてQuickTimeを取り上げます。次のコマンドラインはQuickTimeを使用してファイルを開き、引数はQuickTimeが起動時にファイルを再生するかどうかを制御できます。

open -a "QuickTime Player" a.mp4 --args -MGPlayMovieOnOpen 0 # or 1

Objective-C/Cocoaを使用したMacアプリの起動を読みました。prosseekの答えは、と同等だと思いますがopen -a <App> <File>、引数を指定しない場合にうまく機能します。ughoavgfhwの答えopen -a <App> --args <Arg1> <Arg2> ...は、私が開くファイルを指定しない場合に、と同等だと思いますが、うまく機能します。ただし、どちらもファイル名と引数を同時に指定することはできません。

また、ファイル名を引数リストに追加しようとしました。これは、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)、それとも私に解決策を教えてもらえますか?ありがとう。

4

1 に答える 1

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];
于 2012-10-20T22:45:40.303 に答える