如何将字符串解析为child_process.spawn的适当参数?



我希望能够接受一个命令字符串,例如:

some/script --option="Quoted Option" -d --another-option 'Quoted Argument'

并将其解析为可以发送给child_process.spawn的内容:

spawn("some/script", ["--option="Quoted Option"", "-d", "--another-option", "Quoted Argument"])
我找到的所有解析库(例如minimist等)都通过将解析为某种选项对象等,在这里做了太多的。我基本上想要Node首先创建process.argv所做的等效操作。

这似乎是一个令人沮丧的洞在本地api,因为exec需要一个字符串,但不像spawn执行安全。现在我通过使用:

来解决这个问题
spawn("/bin/sh", ["-c", commandString])

然而,我不希望这与UNIX如此紧密地联系在一起(理想情况下它也可以在Windows上工作)。想买吗?

标准方法(无库)

您不必将命令字符串解析为参数,child_process.spawn上有一个名为shell的选项。

options.shell

如果true,在shell中运行命令。
UNIX上使用/bin/sh, Windows上使用cmd.exe

<标题>例子:
let command = `some_script --option="Quoted Option" -d --another-option 'Quoted Argument'`
let process = child_process.spawn(command, [], { shell: true })  // use `shell` option
process.stdout.on('data', (data) => {
  console.log(data)
})
process.stderr.on('data', (data) => {
  console.log(data)
})
process.on('close', (code) => {
  console.log(code)
})

minimist-string包可能正是您要找的。

下面是一些解析示例字符串的示例代码-

const ms = require('minimist-string')
const sampleString = 'some/script --option="Quoted Option" -d --another-option 'Quoted Argument'';
const args = ms(sampleString);
console.dir(args)

这段代码输出如下-

{
  _: [ 'some/script' ],
  option: 'Quoted Option',
  d: true,
  'another-option': 'Quoted Argument'
}

相关内容

  • 没有找到相关文章

最新更新