Spawn参数数组元素与行情

时间:2015-01-25 20:59:07

标签: node.js coffeescript

我正在使用spawn执行latexmk child_process.spawn command, args, options其中command = 'latexmk'args数组

["-interaction=nonstopmode", "-f", "-cd", "-pdf", "-synctex=1", "-file-line-error", "-shell-escape", "-xelatex", "-outdir="/Users/user/Documents/path with space/.auxdir"", ""/Users/user/Documents/path with space/main.tex""]

options只设置了一些环境变量。我从stderr获得以下内容:

stderr: mkdir ": Permission denied at /usr/texbin/latexmk line 1889.

latexmk似乎在尝试搜索包含"的路径。如果路径中有空格,则引号是必需的。我该怎么做才能解决这个问题?

编辑:

要明确,我需要填充outdirfilePath,如下所示:

args.push("-outdir=\"#{outdir}\"")
args.push("\"#{filePath}\"")

问题是"\'#{}\'"给了我文字字符串。

1 个答案:

答案 0 :(得分:0)

对于给定的program,我需要有两种情况可以使用它。一个是它返回buffer而另一个返回stream时。在nodejs文档中,exec用于前者,而spawn用于后者。我希望分享相同的参数,除了arg_i中可能存在的额外spawn。我遇到的问题是找到一个处理空白的解决方案。以下解决了该问题:

args= ["arg1", "arg2", "...", "arg_i", "...", "arg_n", "path /with /space"]

exec

escapedArgs = (item.replace(' ', '\\ ') for item in args)
command = "program #{escapedArgs.join(' ')}"
proc = child_process.exec command, options, (error, stdout, stderr)

对于spawnargs不需要修改:

proc = child_process.spawn command, args, options