node child_process.spawn不使用windows上路径中的空格

时间:2014-01-25 21:17:31

标签: node.js

如何提供child_process.spawn

的路径

例如路径:

c:\users\marco\my documents\project\someexecutable

路径由最终用户从配置文件中提供。

var child_process = require('child_process');
var path = require('path');
var pathToExecute = path.join(options.toolsPath, 'mspec.exe');
child_process.spawn(pathToExecute, options.args);

目前只有child_process.spawn

使用该空格后的部分

我还尝试在路径中添加引号,如下所示:

var child_process = require('child_process');
var path = require('path');
var pathToExecute = path.join(options.toolsPath, 'mspec.exe');
child_process.spawn('"' + pathToExecute + '"', options.args);

然而,这会导致ENOENT错误。

3 个答案:

答案 0 :(得分:3)

第一个参数必须是命令名,而不是可执行文件的完整路径。有一个名为cwd的选项可以指定进程的工作目录,也可以确保可执行文件可以将其添加到PATH变量中(可能更容易)。

此外,传递给args的{​​{1}}数组不应包含空元素。

你的代码应该是这样的:

spawn

答案 1 :(得分:0)

我经常使用spawn,我解决问题的方法是使用process.chdir。因此,如果您的路径为c:\users\marco\my documents\project\someexecutable,那么您应该执行以下操作:

process.chdir('C:\\users\\marco\\my documents\\project');
child_process.spawn('./myBigFile.exe', options.args);

请注意双\,以及它对我的影响。

答案 2 :(得分:0)

根据https://github.com/nodejs/node/issues/7367#issuecomment-229728704,可以使用def getTuple(s): try: s = eval(str(s)) if type(s) == tuple: return s return except: return with open("filename.txt", "rb") as fp: im_list = [] data_points = fp.read() data_point_list = data_points.split("-") for data_point in data_point_list: im_list.append(getTuple(data_point)) # the code snippet from https://stackoverflow.com/questions/12062920/how-do-i-create-an-image-in-pil-using-a-list-of-rgb-tuples im2 = Image.new(im.mode, im.size) im2.putdata(list_of_pixels) 选项。

例如

> data = data.frame(name = c('Mike', 'Tony', 'Carol', 'Tim', 'Joe'), veh = c('car', 'bike', 'car', 'car', 'cycle') )
> data
   name   veh
1  Mike   car
2  Tony  bike
3 Carol   car
4   Tim   car
5   Joe cycle
> str(data$name)
 Factor w/ 5 levels "Carol","Joe",..: 3 5 1 4 2
> str(data$veh)
 Factor w/ 3 levels "bike","car","cycle": 2 1 2 2 3
> levels(data$veh)
[1] "bike"  "car"   "cycle"

会工作。