Node.js child_process.exect stdout возвращает значение null, но stderr этого не сделал

#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 .