使用 spawn 如何保持原来命令行的输出样式?

2020-02-19 14:54:08 +08:00
 FaiChou

我在使用 Node.js 里 spawn 来执行一段命令:

const codePushProcess = spawn('code-push', [
  'release-react',
  `rrs-${platform}`,
  platform,
  `--deploymentName=${deploymentName}`,
  `--description=${desc}`,
  `--targetBinaryVersion=${version}`,
  '-m'
])
codePushProcess.stdout.on('data', chunk => {
  console.log(chunk.toString('utf8'))
})

codePushProcess.stderr.on('data', data => {
  console.error(`stderr: ${data}`)
})

codePushProcess.on('close', code => {
  if (code === 0) {
    console.log('CodePush Success!')
  } else {
    console.log(`CodePush process exited with code ${code}`)
  }
})

遇到两个问题:

  1. 如何打印 codePushProcess 本身的命令? 在 ChildProcess 里找不到有这个属性.
  2. code-push 这个命令会向 stdout 输出一个动态的上传进度条, 但是使用 console.log 输出会全部变成 string 形式, 在 bash 下都是单色, 并且动态的进度条也没有, 如何解决?
4977 次点击
所在节点    Node.js
2 条回复
FaiChou
2020-02-19 16:35:40 +08:00
贴个对比图:

FaiChou
2020-02-19 17:46:42 +08:00
解决了:

spawn('code-push', args, { stdio: 'inherit' })


这个属性会将 stdio 传递给 parent process.

https://nodejs.org/api/child_process.html#child_process_options_stdio

'inherit': Pass through the corresponding stdio stream to/from the parent process. In the first three positions, this is equivalent to process.stdin, process.stdout, and process.stderr, respectively. In any other position, equivalent to 'ignore'.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/645816

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX