1
私は、次のようなNodeJSコードを持っている:私は正常にシャットダウンを管理したい防止信号(NodeJS)
[HelloWorld.py]
print 'Hi there'
import time
time.sleep(5)
、しかし:
よう[myFile.js]
var path = require("path");
var cp = require("child_process");
var child = cp.spawn("python",["HelloWorld.py"], { stdio:'pipe', });
child.stdout.on('data', (data) => {
console.log(`CHILD stdout: ${data }`);
});
child.stderr.on('data', (data) => {
console.log(`CHILD stderr: ${data}`);
});
process.on("SIGINT",()=>{
// close gracefully
console.log("Received SIGINT");
})
child.on('exit',(code)=>{console.log(`child Process exited with code ${code}`)})
とPythonスクリプト私はこのコンソールに出力を取得、
> node myFile.js
とプレス制御-C:私は経由して、コマンドラインでこのコードをスタート
^CReceived SIGINT
CHILD stdout: Hi there
CHILD stderr: Traceback (most recent call last):
File "HelloWorld.py", line 3, in <module>
time.sleep(5)
KeyboardInterrupt
child Process exited with code 1
python(子プロセスで実行中)が '^ C'キーボードイベントを受け取ったことを示します。しかし、私はキーボードの割り込みでクラッシュするのではなく、子プロセスをちょっと優雅に終了させたいと思っています。 (また、子プロセスがクラッシュする原因となった)
は、私が(子プロセスがクラッシュする原因と)(動作しませんでした)[undefined,'pipe','pipe']
、および
['ignore','pipe','pipe']
含め、
options.stdioのためのさまざまな組み合わせを試してみました、と私は
worker.stdin.end()
を試してみました。
への道はありませんは親NodeJSプロセスから標準を継承していますか?
は、あなたのPythonスクリプトで例外をキャッチに反対しています?そうでなければ、 'try'' catch'文でラップしてエラーを無音にすることができます。 参照:http://stackoverflow.com/questions/7073268/remove-traceback-in-python-on-ctrl-c – Mike
良い点ですが、私の質問はPythonではなくNodeJSです。上記の例ではPythonを使用しています。(A)KeyboardInteruptが子プロセスに渡されていることを明確にしています。(B)私が書いているコードは一般化されたタスクランナー用です。子プロセスで実行されるすべてのスクリプトと言語でtry/catchを挿入します。最初に子プロセスに割り込みが送信されないようにしてください。 – Jthorpe