微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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]);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐