我可以在node.js中运行bash命令,如:
var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("ls -la", function(err, stdout, stderr) {
console.log(stdout);
});
如何获取该命令的退出代码(本例中为ls -la
)?我试过了
exec("ls -la", function(err, stdout, stderr) {
exec("echo $?", function(err, stdout, stderr) {
console.log(stdout);
});
});
不管以前命令的退出代码如何,这总是返回0。我错过了什么?
答案 0 :(得分:33)
这两个命令在不同的shell中运行。
要获取代码,您应该可以在回调中查看err.code
。
如果这不起作用,则需要添加exit
事件处理程序
e.g。
dir = exec("ls -la", function(err, stdout, stderr) {
if (err) {
// should have err.code here?
}
console.log(stdout);
});
dir.on('exit', function (code) {
// exit code is code
});
答案 1 :(得分:5)
来自文档:
如果提供了
callback
函数,则使用参数(error, stdout, stderr)
调用它。成功时,error
将为null
。出错时,error
将是错误的实例。error.code
属性将是子进程的退出代码,而error.signal
将设置为终止进程的信号。除0以外的任何退出代码都被视为错误。
所以:
exec('...', function(error, stdout, stderr) {
if (error) {
console.log(error.code);
}
});
应该工作。
答案 2 :(得分:1)
在节点文档中,我找到了回调函数的这些信息:
成功时,错误将为空。出错时,错误将是错误的实例。 error.code属性将是子进程的退出代码,而error.signal将设置为终止进程的信号。除0以外的任何退出代码都被视为错误。
答案 3 :(得分:0)
import { Dimensions , StatusBar } from 'react-native';
const screenHeight = Dimensions.get('screen').height;
const windowHeight = Dimensions.get('window').height;
const navbarHeight = screenHeight - windowHeight + StatusBar.currentHeight;
此功能公开了最好的同步界面:https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options
示例:
child_process.spawnSync()
输出:
#!/usr/bin/env node
const child_process = require('child_process');
let out;
out = child_process.spawnSync('true');
console.log('status: ' + out.status);
console.log('stdout: ' + out.stdout.toString('utf8'));
console.log('stderr: ' + out.stderr.toString('utf8'));
console.log();
out = child_process.spawnSync('false');
console.log('status: ' + out.status);
console.log('stdout: ' + out.stdout.toString('utf8'));
console.log('stderr: ' + out.stderr.toString('utf8'));
console.log();
out = child_process.spawnSync('echo', ['abc']);
console.log('status: ' + out.status);
console.log('stdout: ' + out.stdout.toString('utf8'));
console.log('stderr: ' + out.stderr.toString('utf8'));
console.log();
在Ubuntu.19.10的Node.js v10.15.1中进行了测试。