[解決済み] Node.jsで子プロセスを生成し、端末の出力をライブで取得する。
2022-05-13 16:42:06
質問
hi'を出力し、1秒スリープし、'hi'を出力し、1秒スリープする、というようなスクリプトがあります。さて、このモデルでこの問題に取り組もうと思いました。
var spawn = require('child_process').spawn,
temp = spawn('PATH TO SCRIPT WITH THE ABOVE BEHAVIOUR');
temp.stdout.pipe(process.stdout);
さて、問題は出力を表示するためにタスクが終了している必要があることです。私が理解しているように、これは新しく生成されたプロセスが実行制御を取るという事実によるものです。明らかに、node.jsはスレッドをサポートしていないので、何か解決策がありますか?私のアイデアは、おそらく2つのインスタンスを実行し、最初のインスタンスはタスクを作成する特定の目的のために、それは2番目のインスタンスのプロセスに出力をパイプすることでした、これが達成されることを考慮します。
どのように解決するのですか?
私はまだNode.jsに足を踏み入れていませんが、いくつかのアイディアを持っています。
execFile
の代わりに
spawn
;
execFile
はスクリプトのパスがある場合に使用します。
spawn
は、Node.jsがシステムパスに対して解決できる、よく知られたコマンドを実行するためのものです。
1. コールバックを提供する を用意して、バッファリングされた出力を処理します。
var child = require('child_process').execFile('path/to/script', [
'arg1', 'arg2', 'arg3',
], function(err, stdout, stderr) {
// Node.js will invoke this callback when process terminates.
console.log(stdout);
});
2. 子プロセスの標準出力にリスナーを追加する ストリーム ( 9thポート・ネット )
var child = require('child_process').execFile('path/to/script', [
'arg1', 'arg2', 'arg3' ]);
// use event hooks to provide a callback to execute when data are available:
child.stdout.on('data', function(data) {
console.log(data.toString());
});
さらに、生成されたプロセスをNodeのコントロールターミナルから切り離し、非同期で実行できるようにするオプションもあるようです。私はまだこれをテストしていません。 API ドキュメント には、このような例があります。
child = require('child_process').execFile('path/to/script', [
'arg1', 'arg2', 'arg3',
], {
// detachment and ignored stdin are the key here:
detached: true,
stdio: [ 'ignore', 1, 2 ]
});
// and unref() somehow disentangles the child's event loop from the parent's:
child.unref();
child.stdout.on('data', function(data) {
console.log(data.toString());
});
関連
-
[解決済み] テスト
-
[解決済み】npx コマンドが見つかりません。
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] Node.jsを完全にアンインストールして、最初から再インストールする方法 (Mac OS X)
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
-
[解決済み] Node.jsでディレクトリに存在するすべてのファイル名のリストを取得する方法は?
-
[解決済み] Node.jsで現在のスクリプトのパスを取得するにはどうしたらいいですか?
-
[解決済み] Node.jsでPOSTデータを処理する方法は?
-
[解決済み] node.jsで「Error: spawn ENOENT」をデバッグするにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】AWS STS AssumeRoleへのアクセスを可能にする方法
-
[解決済み] (node:63208) DeprecationWarning: collection.ensureIndex は非推奨です。代わりにcreateIndexesを使用してください [重複]。
-
[解決済み】"npm update -g" の後に "Cannot find module 'npmlog'" というエラーが発生する。
-
[解決済み】Nodejsの解決方法:Error: ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み】nodemon - app crashed - waiting for file changes before start
-
[解決済み] Expectアサーションの型エラー -> expect(...).toExistは関数ではない
-
[解決済み] Node.jsのホスト名/IPが証明書のaltnamesと一致しない
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
-
[解決済み] NPMが同じエラーで固まる EISDIR: ディレクトリに対する不正な操作、エラーで読み込み (ネイティブ)
-
[解決済み] ノードのバージョンを管理するためのnまたはnvm - 各バージョンのグローバルモジュールを保持することは良いアイデアですか?