spawnSync 返回空字符串,但命令直接在 shell 中运行良好?

问题描述 投票:0回答:1

我正在寻找一种以类似同步的方式在 javascript 中运行 shell 命令的方法。 我目前发现的最好的是

spawnSync
但它会返回意外的空字符串,而命令在 shell 中是正确的。

const foo = spawnSync('git', [
  'log',
  '--diff-filter=A',
  '--format="%cI"',
  '--',
  `path/to/a/file/in/repo`,
])
  .stdout.toString() // -> ''

该命令在 shell 中运行良好

$ git log --diff-filter=A --format="%cI" -- "path/to/a/file/in/repo"
2023-12-07T22:11:50+08:00
javascript node.js typescript
1个回答
0
投票

您调用了错误的方法,

stout
是一个可读流。您需要向
data
事件添加一个侦听器,该事件从子进程发出输出数据。

const foo = spawnSync('git', [
  'log',
  '--diff-filter=A',
  '--format="%cI"',
  '--',
  'path/to/a/file/in/repo'
])


foo.stdout.on("data", (data) => {
  console.log(data);
});

foo.on("close", (code) => {
  console.log(`child process close all stdio with code ${code}`);
});

foo.on("exit", (code) => {
  console.log(`child process exited with code ${code}`);
});
© www.soinside.com 2019 - 2024. All rights reserved.