【问题标题】:Node.js STDOUT value not comparable with string or booleanNode.js STDOUT 值与字符串或布尔值不可比较
【发布时间】:2016-12-27 15:23:27
【问题描述】:

我正在通过 Node.js 以编程方式执行 shell 命令,结果是 true... 字面意思是 <string> true,但我无法将其与 booleanstring 进行比较。

const exec = require('child_process').exec;

exec('docker inspect -f {{.State.Running}} service-redis', (err, stdout, stderr) => {
   // here stdout has value "true"
   console.log(typeof stdout) // returns "string"
   console.log(stdout == 'true') // returns false
   console.log(stdout == true) // returns false
});

我尝试转换 stdout.toString() 以防万一,但结果是一样的。我很困惑。有什么想法吗?

【问题讨论】:

  • stdout 是一个流。
  • 可能是因为末尾有一个\n。你试过stdout.startsWith('true')吗?
  • @ShreyashSSarnayak,太简单了……你是对的!

标签: node.js


【解决方案1】:

您需要修剪字符串,因为它在末尾以换行符的形式有不可见的空格。

const exec = require('child_process').exec;

exec('docker inspect -f {{.State.Running}} service-redis', (err, stdout, stderr) => {
    // here stdout has value "true"
    console.log(stdout.trimRight() === 'true')
});

请注意,尾随换行符不是 Node 做任何奇怪的事情。通常情况下,程序会在其控制台输出中附加一个换行符,尤其是当人类正在查看它时。其实这是one of the thingsconsole.log()为你做的。

想象一下,如果您每天使用的程序(lsgit、...)在没有换行符的情况下终止了它们的输出。您的提示(您键入之前的标记,例如$)将与上一个程序的输出在同一行上拥挤。呸!

甚至文件通常也以换行符结尾,因为 makes it easier 用于将来自各种来源(例如日志文件)的数据连接在一起并使用 UNIX 工具。还有一种广泛采用的做法是让您的代码编辑器为您强制执行此操作。简而言之,您会在各处看到这一点。

childProcess.exec() 方法不对这些换行约定做任何假设,它的级别太低了,所以它保持它们在适当的位置。除了tiny modules 的问题,您可以轻松地在exec() 之上创建一个抽象来处理您的修剪。

【讨论】:

  • 既然你提到了它,我注意到stdout的值后面总是打印一个空行,所以最后有一个\n。 Tnx!
  • 没问题@Milkncookiez。我添加了一些您可能感兴趣的背景和背景。
猜你喜欢
  • 1970-01-01
  • 2011-08-21
  • 2015-11-15
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
相关资源
最近更新 更多