node.js – child_process spawn()中的通配符?

我想在node.js中使用spawn执行像“doSomething ./myfiles/*.csv”这样的命令.我想使用spawn而不是exec,因为它是某种监视进程,我需要stdout输出.

我试过这个

var spawn = require('child_process').spawn; 
spawn("doSomething",["./myfiles/*.csv"]);

但是,通配符* .csv将不会被解释.

使用spawn()时是否无法使用通配符?还有其他可能解决这个问题吗?

谢谢

托本

解决方法

*由shell扩展,对于child_process.spawn,参数以字符串形式传递,因此永远不会被正确扩展.这是产卵的限制.您可以尝试使用child_process.exec,它将允许shell正确扩展任何通配符:

var exec = require("child_process").exec;

var child = exec("doSomething ./myfiles/*.csv",function (err,stdout,stderr) {
    // Handle result
});

如果您确实需要使用spawn由于某种原因,您可以考虑在创建子进程之前使用类似node-glob的lib自己扩展通配文件模式吗?

更新

在Joyent Node核心代码中,我们可以观察到一种方法,通过spawn在shell中调用任意命令,同时保留完整的shell通配符扩展:

https://github.com/joyent/node/blob/937e2e351b2450cf1e9c4d8b3e1a4e2a2def58bb/lib/child_process.js#L589

这里有一些伪代码

var child;
var cmd = "doSomething ./myfiles/*.csv";

if ('win32' === process.platform) {
    child = spawn('cmd.exe',['/s','/c','"' + cmd + '"'],{windowsverbatimArguments:true} );
} else {
    child = spawn('/bin/sh',['-c',cmd]);
}

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...