簡體   English   中英

child_process exec命令多次執行

[英]child_process exec command is getting executed multiple times

我正在使用exec()運行終端命令來顯示電子mac應用程序中的對話框。

我正在使用的代碼:

var exec = require('child_process').exec;
var request = require('request');

request('https://server_url', function (error, response, data) {

    console.log("inside request");

    exec(`osascript -e 'with timeout of 86400 seconds
                                    tell app "System Events"
                                        display dialog "` + data.pop_up_message + `" buttons {"OK", "Cancel"} 
                                    end tell 
                                end timeout'
    `, function(error, stdout, stderr){

        console.log("inside exec");

    });

});

它在單個請求中顯示多個對話框。

控制台輸出:

inside request
inside exec
inside exec
inside exec

這里的'inside request'只打印一次。 但是'inside exec'正在多次打印。 這個問題的原因是什么? 我該怎么解決這個問題。

內部函數是一個連接到2個流的回調: stdoutstderr 第三個參數是一個錯誤對象,如果子進程失敗或超時,通常包含一些內容(請參閱: 文檔 )。

每當你執行某些操作時,他的輸出將在一段時間后通過其中一個發送消息而到達。 它可能發生在不久之后,或很長一段時間之后。 此外,它可能是一個相當小或大的輸出,因此這將根據執行的內容進入數據塊。 stdoutstderr的“引擎蓋下”可以更容易在C / C ++透視圖中可視化。

假設您編寫了一個C程序,通過寫入stdout每隔5秒打印到控制台,然后用NodeJS模塊調用它。

這里的console.log會在檢測到通過其中一個流發送的消息后立即打印出來。 在該特定情況下,它將每5秒打印一次。

只是一個小圖片,因為可能還有很多關於什么流以及它們如何工作的說法。 這個答案增加了一些有趣的細節。


更新 - 2016年2月28日:

更新了流部分。 像Jaromanda X建議的那樣,錯誤不是緩沖區而是Error對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM