#javascript #node.js #stdout #child-process #stderr
#javascript #node.js #стандартный вывод #дочерний процесс #stderr
Вопрос:
В настоящее время у меня есть этот простой код, который выполняется java -version
в командной строке, чтобы проверить, установил ли пользователь Java.
Странно, что когда я запускаю этот код, stdout
он ничего не дает мне, но stderr
дает мне желаемый результат.
cprocess.execSync("java -version", (err, stdout, stderr) => {
console.log("stdout: " stdout); // nothing
console.log("stderr: " stderr); // output: java version
}
Почему это происходит? Нужно ли мне что-либо менять в exec
параметрах?
Ответ №1:
execSync
не принимает аргумент обратного вызова, но exec
принимает. Текст вопроса ссылается exec
, в то время как фрагмент кода, которым вы поделились, ссылается execSync
, поэтому я предполагаю, что вы имели в виду exec
.
Предполагая, что вы действительно намеревались использовать exec
, обратный вызов правильный, и проблема связана не с кодом, а с java -version
командой, которую вы вызываете — эта команда выводит информацию в stderr, а не в stdout . Вы могли бы перенаправить его, но, честно говоря, я бы не стал беспокоиться — вы могли бы просто использовать вывод stderr.
Комментарии:
1. Потрясающий ответ, как я могу перенаправить его мысль? Я хотел бы знать!!
2. @ABC вы могли бы использовать эту
shell
опцию, а затем перенаправить, используя синтаксис собственной оболочки. Например, на *nix —java -version 2>amp;1
.