- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 exec()
运行终端命令以在 electron 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 个流的回调:stdout
和 stderr
。第三个参数是一个错误对象,如果子进程失败或超时,它通常包含一些内容(参见:documentation)。
每当你执行某事时,他的输出将在一段时间后通过其中一个发送消息到达。它可以在不久之后发生,也可以在很长一段时间之后发生。此外,它可以是一个相当小或很大的输出,因此这将根据执行的内容进入数据 block 。 stdout
和 stderr
的“幕后”在 C/C++ 视角下更容易可视化。
假设您编写了一个 C 程序,它通过写入 stdout
每 5 秒向控制台打印一次,然后您使用 NodeJS 模块调用它。
您的 console.log
会在检测到通过其中一个流发送的消息时立即打印一些内容。在这种特定情况下,它将每 5 秒打印一次。
只是一张小图,因为关于流是什么以及它们如何工作还有很多要说的。 This answer添加了一些关于它们的有趣细节。
更新 - 29/18/2016:
更新了流部分。正如 Jaromanda X 所建议的那样,错误不是缓冲区而是错误对象。
关于javascript - child_process exec 命令被多次执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39198715/
.bat文件为:。在命令提示符下运行cmd/c a.bat将打开记事本窗口。并且在关闭窗口之前打印Foobar。我可以在不关闭记事本的情况下运行下一个命令。。但是,在node.js child_pro
有一段时间以来,我一直在尝试达成一些目前对我来说还行不通的事情。 对于 nodejs,我喜欢运行交互式 sh-command 并在命令退出后使用 sh-command 输出。我喜欢编写一个可生成的生成
我正在使用 Node.js 下的 Bluebird Promise 库,非常棒!但我有一个问题: 如果您查看 Node 的文档 child_process.exec和 child_process.ex
此代码适用于 Windows 和 Mac OS X: var exec = require( 'child_process' ).exec exec( 'git clone git@github.co
我在MacOS和Linux中使用node.js v0.10.12时遇到了这个错误,这段代码在 Windows 7 中工作正常。唯一的区别是在 Windows 7 上我有管理员 ID,在 MacOSX
我在 Electron 项目中使用 npm 库“child_process”来捕获带有 spawn 的 C 程序的标准输出流。但是,当我尝试记录 child.stdout.on('data') 捕获的
在 atom-text-editor 插件开发中,我运行一个 child_process,如 cp = require 'child_process' command = "python /home/
我正在尝试在我的 Node 脚本中创建一个虚拟 bash,它从另一个用户上下文中执行命令。 var spawn = require('child_process').spawn; var termin
我有一个在 electron 中运行的 angular2 webpack 项目。我正在尝试使用 shelljs 但 webpack 无法构建并出现错误: [0] ERROR in ./~/shellj
React Native v0.23.0 Node v5.11.0 Windows 10 10586(我在 OSX 上尝试并得到相同的错误) 我尝试在React Native中编写var cp = r
try { var output = child_process.execSync(cmd); } catch (ex) { return 0 } return output.toSt
我正在尝试使用 node.js 执行一堆 bash 命令。我使用 child_process.exec 来执行命令。 var child_process = require('child_proces
这个问题在这里已经有了答案: How to print both to stdout and file in C (4 个答案) Writing to both stdout & a file (7
我正在使用 child_process 运行最终调用的脚本 ssh -t server "sudo command" 我回来了: Pseudo-terminal will not be allocat
我正在尝试在 Node 中执行一个子进程,其名称来自发布请求。我使用的是express,因此是app.post()。我的代码如下。 app.post('/*', function(req, res)
我需要验证 child_process 是否已成功终止,因为如果该进程仍然存在,我将无法执行下一步操作。 var proc = require('child_process'); var prog =
我正在尝试使用目标设备启动 cordova 命令。我已经测试了该命令并且它有效,但是当我尝试用我的代码生成它时,它忽略等号,因此不会运行。此代码确实可以工作,只是不添加 "--target='iPho
我正在使用 exec() 运行终端命令以在 electron mac 应用程序中显示对话框。 我使用的代码: var exec = require('child_process').exec; var
如何在 node.js 上生成此命令 (/usr/bin/which flac): var spawn = require('child_process').spawn; var cmd = spaw
我正在尝试 execute a child在不同的目录中处理,然后是其父目录。 var exec = require('child_process').exec; exec( 'pwd',
我是一名优秀的程序员,十分优秀!