問題タブ [nspipe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
3354 参照

objective-c - 複数のパイプ入力を使用するNSTask

複数の入力を必要とするコマンドをパイプを使用して処理しようとしていますが、その方法がよくわかりません。これが私がやろうとしていることの抜粋です。最初の入力の処理方法は知っていますが、2番目の入力の配管に迷っています-newstdinpass

したがってhdiutil、この方法で使用するのは少しハックですが、パイプに関しては、正しい方法で実行していますか?

ありがとう。

更新:他の人がこれについて疑問に思っている場合、私の問題の簡単な解決策は、Ken Thomasesが以下で指摘したように、nullで終了する文字列を渡すことです。[[NSString stringWithFormat:@"oldpass\0newpass\0"] dataUsingEncoding:NSUTF8StringEncoding]パイプに使用します。今でもNSTasks、パイプで複数をブリッジする方法を学ぶ必要があります...

0 投票する
1 に答える
87 参照

objective-c - タスク終了後にデータを受信して​​いますか?

コマンドを実行し、その出力を非同期的に取得するためにNSTaskandを使用しています。NSPipe

私が使用しているコードは、こちらの質問とほぼ 100% 同じです(修正が含まれています)。

ただし、テスト中に、 が最後の の数ミリ秒前に来ることがあることに気付きました。NSTaskDidTerminateNotificationNSFileHandleReadCompletionNotification

つまり、一見死んでいるタスクが、終了した後にデータを送信しています。

何がうまくいかないのですか?何か案は?

0 投票する
1 に答える
696 参照

objective-c - Objective-c:NSPipeを使用してNSTaskで不正なコマンドechoを出力する方法は?

私は次のようなコードを持っています、それは大丈夫です、しかし私はそれについて2つの質問があります。

1)@ "ls --l"などの不正なパラをshに割り当てると、 outStringはnullになります。つまり、「ls:-:そのようなファイルまたはディレクトリはありませんls:l:そのようなファイルまたはディレクトリはありません」というエラー警告をキャプチャできません。どうすれば対処できますか?

2)この関数を実装するにはどうすればよいですか:アプリの現在のディレクトリが"/ user / Doc"で、sh = @ "cd /"を実行した後、sh = @ "ls -l"を実行して、次のループの「/」ディレクトリ。ただし、新しいループが開始されると、現在のディレクトリは「/ user/Doc」に戻ります。最後のループのタスク環境を維持するにはどうすればよいですか?

さらに、ターミナルで直接作業するのと同じように、「/ bin / sh」を実行するための永続的なタスクを継続できますか?

0 投票する
1 に答える
408 参照

objective-c - NSTask を使用してシェル コマンドを実行すると、NSPipe を介して出力される奇妙な問題

これが私のコードです。myCmd=@"cd /\nls -l\n"またはを設定するとmyCmd=@"ls -l\n"問題ありません。ただし、を設定するmyCmd=@"cd /\n"と、プログラムは行if ((output =[[outPipe fileHandleForReading] availableData]) && [output length])で停止し、デバッグ情報は何も出力されません。

"cd /"cmdが他のシェルコマンドと異なるかどうかはわかりません。アドバイスをいただけますか?

0 投票する
1 に答える
762 参照

objective-c - ストリームを使用した Clang NSTask

「なぜ?」、「役に立たない?」、「気にしないで」というコメントは気にしないでください。clang を使用して、別のプログラム内でプログラムをコンパイルしたいと考えています。を作成NSTaskして引数を設定すると、ファイルが存在する (つまり、ストリームがない) 場合に機能し、物理ファイルに書き込みます。入力と出力の両方にストリームを使用するという、本当に欲しいものを手に入れることができませんでした。-xc オプションと - オプションを使用しても、パイプを使用してその機能を実装できない場合、clang と gcc の両方で stdin をコンパイルできることを私は知っています。また、clang の出力をファイル ハンドルまたはストリームにリダイレクトする方法もわかりません。

これをコンパイルしてoutfileに正しい出力を生成するコードを次に示します

入力ストリームにこれを使用してみました:

場合によっては、NSTask がまだ存在している間にパイプが閉じると、出力ファイルが作成されて実行されると思います。これは、clangがstdinが閉じるのを待っているだけだと思います。データが読み取られたときにパイプを閉じる方法はありますか?

出力のために、NSPipe の fileHandleForWriting を -o のパラメーターとして使用しようとしましたが、[NSConcretePipe fileSystemRepresentation]認識されないセレクターのエラーが発生します。同じエラーに対して、stdout のファイル記述子を使用してファイル ハンドルを作成しようとしました。それをリダイレクトするコマンドライン引数は知りません。リダイレクトに使用しようとしまし|たが、機能させることができませんでした。リダイレクトするUNIXマジックがあれば、stdoutを好きな場所に複製できます。

すべてのデータが読み取られたときにパイプを閉じる方法はありますか? そして、clangs出力をリダイレクトしますか? 同じことをより簡単にまたはよりクリーンに達成する方法が他にある場合、私はどのような実装にもオープンです。これらの 2 つの項目に関するヘルプは非常に優れています。

0 投票する
0 に答える
263 参照

objective-c - NSTaskはXcode4.3.3の外部でstdoutを受信しません

これは私の最初の投稿なので、そこにいるすべての投稿者に感謝します(私は非常に受動的にSOを使用しています-素晴らしいです!)

私は古き良きQuicktimeAPIを使用してMacOSX用のビデオエクスポートツールに取り組んでいます。

簡単な説明:複数の入力ムービーからフレームを切り取り、それらを新しい出力ムービー(メディアキオスクの一種)にアレンジ(スケーリング)します。

必要なQT機能の多く(タイムコードの記述など)は32ビットアプリケーションにネストする必要があるため、32ビットコマンドラインツールを使用してこれをオフラインで実行することにしました。ツールはフレームごとに(オフラインで)レンダリングし、現在の進行状況を0.0〜1.0の値で出力します

これは、NSTaskを介してメインアプリケーション(Cocoa、GUI、最新のもの)によって呼び出されます。スタウトはNSPipeによって捕らえられます。

私はいくつかの例を見て、私のコードの概要を簡単に説明します。

今問題:

Xcode内で(「実行」を介して)アプリケーションを起動すると、すべてが正常に機能します。呼び出しは適切に行われ、プロセスはアクティビティモニターに表示され、NSLevelIndicator(革新的なアプリの人)は(フロート)進行状況変数に従って順調に進んでいます。

しかし、アプリケーションを「アーカイブ」してXcodeの外部で実行すると、コマンドラインツールの標準出力がアプリケーションに到達しないように見えます。でデバッグファイルを書いてみました

チャンスはありません、それは決して呼ばれません!私はいくつかのMacで問題をテストしました、同じ問題...

私は明らかな間違いを犯しましたか、それとも構成するためのいくつかの設定がありますか(サンドボックスがオフになっています)、おそらく私が見落としていた既知の問題ですか?

助けてくれてありがとう

あいさつマット

0 投票する
1 に答える
532 参照

objective-c - この NSPipe/NSFileHandle コードのリークを見つけるのを手伝ってくれる人はいますか?

したがって、この NSFileHandle/NSPipe がトリガーされると、この問題が発生します... CPU の使用とメモリが狂い始めます。問題は、このリークを見つけるのが難しいことです。アドバイスやヘルプをいただければ幸いです。乾杯。

.h

.m

0 投票する
1 に答える
6524 参照

objective-c - 一貫性のある環境でNSTaskrunterminalコマンドをループで使用するにはどうすればよいですか?

NSTaskを使用して、ターミナルをシミュレートしてコマンドを実行したいと思います。コードは次のとおりです。ループで入力を取得し、プロセス出力を返すことができます。

私の質問は、ループが終了すると、実行環境が初期化状態に復元することです。たとえば、デフォルトの実行パスはであり、パスをに変更するため/Users/appleに実行してから実行すると、ではなくが返されます。cd //pwd/Users/apple/

NSTaskでは、どうすればターミナルを完全にシミュレート できますか?

0 投票する
2 に答える
3903 参照

objective-c - Unix コマンドから読み取る NSTask/NSPipe

UNIX プログラムを実行し、生成された出力を 1 行ずつ読み取る必要がある Cocoa アプリケーションを作成しています。NSTask と NSPipe を次のように設定しました。

プログラムが で終了するように指示するまで、コマンドは終了しません[task terminate]-readInBackgroundAndNotifywhile([(data = [handle availableData]) length] > 0)、など、ハンドルから読み取るいくつかの方法を試しまし-waitForDataInBackgroundAndNotifyたが、パイプはデータを生成しないようです。データを「突く」NSTaskまたはNSPipeフラッシュする方法はありますか?

編集:と-readInBackgroundAndNotify

-waitForDataInBackgroundAndNotify:

whileループ付き:

EDIT 2 : 引数は次のように設定されます (コマンドはtshark):

0 投票する
2 に答える
1369 参照

objective-c - NSTask と NSPipe を使用すると、CPU 使用率が 100% になる

NSTask を使用して簡単な bash スクリプトを実行し、出力をテキスト ビューに表示しようとしています。タスクが実行されると、アプリの CPU 使用率は単純ですがecho(今のところ) 100% です。

問題を切り分けるために、完全に新しいプロジェクトを作成しました。

正しく実行され、出力 ( としてNSData) が次のように記録されますNSLog

ただし、アプリを終了するまで CPU 使用率は 100% のままです。

編集:

Time Profiler のテストでは以下のリストが返されますが、これをどのように解釈すればよいかわかりません。

ここに画像の説明を入力