2016-07-25 15 views
0
var cp = require("child_process"); 

var proc = cp.spawn("cmd"); 
proc.stdout.on("data", data => console.log("Data:", data.toString())); 
proc.stdin.write("help\n"); 
proc.stdin.write("help\n"); 

上記のコードスニペットでは、ストリームが特定のコマンドの書き込みを終了したとき(つまり、これらのコマンドが端末で実行された場合、テキストを入力することができる点滅カーソルを表示します)?node.jsのコンソール出力の終了を検出する

私はイベントendを聞いてみることを試みましたが、これはプロセスが終了したときに発せられたように見えます。

+0

@提案されているよう

var cp = require("child_process"); var proc = cp.spawn("cmd"); proc.stdout.on("data", data => { var str = data.toString(); console.log(str) if(str.search("string to be detected") !== -1){ console.log("Command finished!"); } }); proc.stdin.write("help\n"); proc.stdin.write("string to be detected\n"); 

別の方法としては、改行や新しいプロンプトとしてコマンド出力の終了を示す応答のいくつかの機能のために待つことができますコマンドプロンプトを生成し、そのコマンドを使ってコマンドを発行し、そのコマンドがいつ完了するかを検出しようとしていますか?これは悪い考えのように聞こえる、あなたがしようとしていることを詳しく説明できますか? – Will

+0

私は例としてコマンドプロンプトを使用していますが、実際には 'ghci'と対話しようとしています。これはHaskellのreplとして実行できます。 replを通してnode.jsで発行されたコマンドの出力がいつ出力されたかを知りたい。 –

+0

@ thing789あなたの子プロセスからあなたのマスタープロセスにコマンドを出力し、stdout経由でそれを聞くことができます。 – hownowbrowncow

答えて

1

あなたが実行しているプログラムが明確な出力形式(例えば、改行で区切られたJSONやXMLなど)を持っていない限り、決定的な方法はわかりません。いずれにしても、プログラム出力の構文解析(および可能なバッファリング)を実行する必要があります。

+0

ターミナル(コマンドプロンプトなど)でコマンドを実行すると、点滅するカーソルが表示されるため、コマンドの実行が終了したことがわかります。どのようにそれを行うのだろうか? –

+0

その時点で、コマンドプロンプトはまだ実行されており、実行されたコマンドが完了したことを通知するために別のプロトコルを使用しているだけです。そのプロトコルは「コマンドプロンプトを表示する」。 @mscdexが言っていることは、出力を解析してそのコマンドプロンプトを探して、目のソフトウェアバージョンを実装する必要があるということです。私は 'ghci'にあまり慣れていませんが、Googleに質問すると出力ストリームで' Prelude> 'を探しているようです。 – Will

0

これは、元のコマンドが実行されたときに返される文字列をstdinに与えることによって解決できます。実行された文字列には不要な効果がなく、おそらく出力とともにstdoutに出力されませんコマンドの例与えられた例:@mesdexでとuser866762

関連する問題