とココア(obj.c)からシェルスクリプトを実行します。私はボタンをクリックするとそれを呼び出します。 'waitUntilExit'で行を削除すると、期待通りに動作しますが、一度だけ動作します。それがそこにあるとき、それは動作しません。 私は 'ls' 'ping -c1 google.com'のような基本的なコマンドも試してみましたが、どうにかして動作させることはできません。あなたが応答を受け取ってココアでシェルスクリプトを実行するためのいくつかの異なるアプローチを持っているなら、今私に教えてください。ありがとうございました:)は、私のようなものを持っている応答
答えて
ねえ、Kukosk。 NSTaskの実行時にCocoaDevに約NSLog()
の問題があるというコメントがあります。修正は、タスクを起動する前にstdin
ためのパイプを設定することです:あなたはNSLog()
に頼っている場合
[task setStandardInput:[NSPipe pipe]];
のみ、タスクが実行されたかどうかを確認するために、これはあなたの問題を解決することがあります。また、NSLog()
ではなく、output
をGUIに表示することもできます。
ありがとう@bavariousあなたは私の一日を救った!待って、あなたは別のNSTaskスレッドで同じ人ですか? :) 神のお恵みがありますように... – swdev
ああ、あなたが見逃していたと思われるドキュメントには、次のような気になるものがあります。「NSTaskオブジェクトは一度しか実行できません。タスクはエラーを発生させます。
だから、待ち合わせの前に[unixTask release]を追加してください。もう一度それを実行したいときは、タスクを作り直してください。
NSTimerはこれのようです。
問題は、タスクの出力バッファを空にしていないことです。タスクが非常に少量のデータを放出しない限り、単にタスクを起動することはできません。waitUntilDone
waitUntilDone
は、決して終了しないタスクではまったく動作しません。
任意の量の出力を発行するタスクでは、生成された出力が読み取られるように設定する必要があります。通常、readInBackgroundAndNotify
またはその中の変種を使用します。
いずれの場合でも、NSTask
のクラス説明の先頭には、概念ガイドへのリンクとこれをカバーする一連の例があります。
Cocoaでシェルスクリプトを実行するさまざまなアプローチには、AMShellWrapper、PseudoTTY.appまたはOpenFileKillerがあります。
- 1. SendInput、私はそのようなものを持っている
- 2. は、私はそうのようなリクエストを投稿する応答ジャージーRESTサーバーを持っている
- 3. dbmigrator私のようなものを持っている移行
- 4. アンドロイドスタジオフラグメントは、私のようなものを持っているのEditText
- 5. ので、私はこのようなものを持っている
- 6. 私はそうのようなマップを持っているマップ
- 7. は、私はこのようなテーブルを持っているSQL
- 8. は、私はこのようなテーブルを持っているSQL
- 9. は、私はこのようなセットアップを持っているナビゲーション
- 10. Grailsは私はこのようなリストを持っている
- 11. は、私はそのようなルートを持っているプロセッサ
- 12. は、私はこのようなモデルを持っている
- 13. は、私は次のような問題を持っている
- 14. は、私はこのようなモデルクラスを持っている
- 15. は私のような物を持っているのjsオブジェクト
- 16. 私はこのようなOBJECTIDを持っているのObjectID
- 17. 私はこのようなデータセットを持っている別の
- 18. 応答スライダー - 私は私のテストサーバー上で応答スライダーを実装している
- 19. セレン:私はiframe対応のこのようなHTMLコードを持って
- 20. iphone - 私はこのような構造を持っている
- 21. 私はこのようなXMLを持っているXSL
- 22. 私は下記のような形を持っているDB
- 23. 私はこのような文字列を持っている
- 24. は、私のようなinputタグを持っている
- 25. 私はこのようなファイルを持っているリストに
- 26. 私はこのようなコードを持っている
- 27. 私はこのようなXMLファイルを持っているC#
- 28. 私はそのようなコードを持っている
- 29. 私はこのような機能を持っているイテレータ
- 30. Djangoは私のような形を持っている
こんにちは、面白い - このコードは私のためにうまくいきます。しかし何らかの理由でNSLogが壊れてしまいます.NSLogは私のために何も表示しませんが、コンソールから直接実行すると期待どおりに動作します。私は決してあなたのコードを変更していません.... – Moszi
[Cocoaアプリから端末コマンドを実行する]の可能な複製(http://stackoverflow.com/questions/412562/execute-a-terminal-command-from -a-cocoa-app) – Mark