Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将字符串解析为child_process.spawn的适当参数?_Node.js_Parsing_Command Line_Child Process - Fatal编程技术网

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
named
shell
上有一个选项

选项.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可能会有所帮助。