Node.js 如何将字符串解析为child_process.spawn的适当参数?
我希望能够获取命令字符串,例如:Node.js 如何将字符串解析为child_process.spawn的适当参数?,node.js,parsing,command-line,child-process,Node.js,Parsing,Command Line,Child Process,我希望能够获取命令字符串,例如: some/script --option="Quoted Option" -d --another-option 'Quoted Argument' 并将其解析为我可以发送给子进程的内容。spawn: spawn("some/script", ["--option=\"Quoted Option\"", "-d", "--another-option", "Quoted Argument"]) 我发现的所有解析库(例如minimist等)在这里通过将其解析为
some/script --option="Quoted Option" -d --another-option 'Quoted Argument'
并将其解析为我可以发送给子进程的内容。spawn
:
spawn("some/script", ["--option=\"Quoted Option\"", "-d", "--another-option", "Quoted Argument"])
我发现的所有解析库(例如minimist等)在这里通过将其解析为某种options对象等而做得太多了。首先,我基本上希望与创建process.argv
的节点做的任何事情都等效
这似乎是本机API中一个令人沮丧的漏洞,因为exec
接受字符串,但执行起来不如spawn
安全。现在,我正在通过以下方式解决此问题:
spawn("/bin/sh", ["-c", commandString])
但是,我不希望它与UNIX的联系如此紧密(理想情况下,它也可以在Windows上工作)。Halp?这个软件包可能正是您想要的
下面是一些解析示例字符串的示例代码-
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'
}
标准方法(无库)
您不必将命令字符串解析为参数,在child\u process.spawn
namedshell
上有一个选项
选项.shell
如果true
,则在shell中运行命令。在UNIX上使用
/bin/sh
,在Windows上使用cmd.exe
例子:
let command=`some_script--option=“Quoted option”-d--另一个选项“Quoted Argument”`
let process=child_process.spawn(命令,[],{shell:true})//使用'shell'选项
process.stdout.on('data',(data)=>{
console.log(数据)
})
process.stderr.on('data',(data)=>{
console.log(数据)
})
process.on('关闭',(代码)=>{
console.log(代码)
})
创建process.argv的不是node.js,而是您使用的shell解释器。因此,它依赖于系统。bash的解释将不同于Windows cmd。@Michael:你找到解决方案了吗。“我现在面临着同样的问题。”Krasimir nope,从未找到明确的答案。目前我仍在使用/bin/sh
。如果您希望将命令行语句拆分为args,则or可能会有所帮助。