[解決済み】Cocoaアプリからターミナルコマンドを実行する
2022-04-10 02:13:23
質問
ターミナルコマンドを実行するには(例えば
grep
)をObjective-CのCocoaアプリケーションから削除することはできますか?
どのように解決するのですか?
を使用することができます。
NSTask
. 以下は、' を実行する例です。
/usr/bin/grep foo bar.txt
'.
int pid = [[NSProcessInfo processInfo] processIdentifier];
NSPipe *pipe = [NSPipe pipe];
NSFileHandle *file = pipe.fileHandleForReading;
NSTask *task = [[NSTask alloc] init];
task.launchPath = @"/usr/bin/grep";
task.arguments = @[@"foo", @"bar.txt"];
task.standardOutput = pipe;
[task launch];
NSData *data = [file readDataToEndOfFile];
[file closeFile];
NSString *grepOutput = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog (@"grep returned:\n%@", grepOutput);
NSPipe
と
NSFileHandle
は、タスクの標準出力をリダイレクトするために使われます。
Objective-C アプリケーションからオペレーティング システムとの対話に関するより詳細な情報については、Apple の Development Center にあるこのドキュメントを参照してください。 オペレーティング・システムとのインタラクション .
編集:NSLogの問題に対する修正を含む
NSTaskを使用してbash経由でコマンドラインユーティリティを実行している場合、NSLogの動作を維持するために、この魔法の行を含める必要があります。
//The magic line that keeps your log where it belongs
task.standardOutput = pipe;
解説はこちら https://web.archive.org/web/20141121094204/https://cocoadev.com/HowToPipeCommandsWithNSTask
関連
-
[解決済み】Git リポジトリから .DS_Store ファイルを削除するには?
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
[解決済み】何が原因か。switch文からこのcaseラベルにジャンプできない [重複]。
-
[解決済み] 警告 : フォーマット文字列は文字列リテラルではありません (安全でない可能性があります)
-
[解決済み] Objective-Cの定数
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] OS Xターミナルでカーソルを単語単位で移動する方法
-
[解決済み] "コード" OSX/MacのVisual Studio Codeのコマンドラインでは動作しない
-
[解決済み] MacのターミナルからVSCodeを起動する/開く
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] NSNumberをNSStringに変換する方法
-
[解決済み] ターゲット・パターンに '%' が含まれていません。メイクファイル
-
[解決済み] NSStringをNSNumberに変換する方法
-
[解決済み] newの代わりにalloc initを使用する
-
[解決済み】SwiftのコードをObjective-Cにインポートするにはどうすればいいですか?
-
[解決済み】UITableViewControllerを使用しないUIRefreshControl
-
[解決済み】NSDateで年/月/日を取得する。
-
[解決済み】メインスレッドでタスクを実行するGCD
-
[解決済み】idの代わりにinstancetypeを使い始めるのは有益でしょうか?
-
[解決済み】NSMutableArrayから反復処理中に削除する最良の方法は?