我正在使用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
似乎在尝试搜索包含"
的路径。如果路径中有空格,则引号是必需的。我该怎么做才能解决这个问题?
编辑:
要明确,我需要填充outdir
和filePath
,如下所示:
args.push("-outdir=\"#{outdir}\"")
args.push("\"#{filePath}\"")
问题是"\'#{}\'"
给了我文字字符串。
答案 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)
对于spawn
,args
不需要修改:
proc = child_process.spawn command, args, options