2017-04-19 16 views
0

execメソッドを実行する簡単なメソッドがchild_processからrm -rfをコマンドとして使用しています。Node.js exec()はコールバックを実行しません

const exec = require('child_process').exec 

const Foo = { 
    emptyDir: params => { 
    exec(`rm -rf ${params.path}`, (err, stdout, stderr) => { 
     console.log('test'); 
    }) 
    } 
} 

Foo.emptyDir({path:'./data/*'}) 

メソッドワークとファイルは削除されますが、コールバックは実行されません。私は何が欠けていますか?

ノードのバージョン:v6.10.2

+0

同じノードバージョンを持っています – Ezzat

+0

@MahmoudEzzat 'console.log( 'test')'部分を実行しますか? – Kunok

+0

私はこれを他のスクリプトの中で実行していましたが、以下の 'process.exit()'を同期させていました。コールバックを実行する前に 'process.exit()'が終了するので、コールバックを実行しませんでした。私は少し質問を編集したので、誰かがこの問題を克服して、実際の問題に対する解決策を将来見つけたなら、もっと助けになるかもしれません。 – Kunok

答えて

0

まず第一に、あなたはノード内のファイルを削除するために、これらのモジュールのいずれかを使用することもできます。

ここで、console.log('test');は実行されません。これは、エラーをテストしないため、PATHにrmコマンドがなくても実行されるか、失敗した場合に実行されるためです。

STDOUTがリダイレクトされた場合、またはconsole.logさえも再定義された場合、console.log()の出力が表示されない場合があります。コールバックが呼び出されたかどうか実際に確認するには、メッセージをファイルに書き込もうとするかもしれません。

+0

ありがとうございます。私はこれらのモジュールを試してみました。問題はメソッドを実行したメインスクリプトにありました。コールバックが実行される前にスクリプトを終了させるsync func 'process.exit()'がありました。 – Kunok

+0

@Kunokはあなた自身で 'process.exit()'を呼び出さないでください。なぜあなたはその理由の1つを発見しただけです。 – AlexTes

+0

@AlexTesええ、私はまれにプロダクションコードで使用しています。しかし、私はこのスクリプトで何かをテストしていました。私は 'process.exit()'を使って以下の他のメソッドの実行を防ぎました。私はそれが実際にテストケースをフォルトしていたことに気づくほど十分に深いとは思わなかった。 – Kunok

関連する問題