我在运行子进程并将其输出写入控制台时遇到了很多麻烦。在本集中,我正在尝试使用spawn
来运行Windows mklink
命令。错误是我没有写文件的权限。
我的问题是,错误并没有以任何方式告诉我。
以下内容将You do not have sufficient privilege to perform this operation.
打印到控制台:
mklink /D C:\some\path\to\my\intended\link C:\path\to\my\folder
但是在node.js中运行它只会给我Error: spawn ENOENT
- 这是一个非常无用的错误消息:
require('child_process').spawn('mklink',
['/D', 'C:\\some\\path\\to\\my\\intended\\link',
'C:\\path\\to\\my\\folder'],
{stdio:'inherit'})
尽管stdio:'inherit',我在控制台上什么也得不到。我也尝试了以下内容:
var x = require('child_process').spawn('mklink',
['/D', 'C:\\some\\path\\to\\my\\intended\\link',
'C:\\path\\to\\my\\folder'])
x.stdout.pipe(process.stdout)
x.stderr.pipe(process.stderr)
但没有骰子。根本没有控制台输出。请注意,我做使用exec
获取控制台输出:
var x = require('child_process')
.exec('mklink /D C:\\some\\path\\to\\my\\intended\\link C:\\path\\to\\my\\folder')
x.stdout.pipe(process.stdout)
x.stderr.pipe(process.stderr)
这应该不需要任何关于windows mklink如何工作的特殊知识 - 我的问题只是使用node.js spawn
进行错误报告。
我在这里做错了什么?这是node.js中的错误吗?
更新:似乎此错误已由节点v0.10.29修复
答案 0 :(得分:1)
对我来说stdio
没有用。
试试这个:
// Helper function to execute and log out child process
// TODO: implement a better success/error callback
var spawnProcess = function(command, args, options, callback) {
var spawn = require('child_process').spawn;
var process = spawn(command, args, options),
err = false;
process.stdout.on('data', function(data) {
grunt.log.write(data);
});
process.stderr.on('data', function(data) {
err = true;
grunt.log.errorlns(data);
});
if (typeof callback === 'function') {
process.on('exit', function() {
if (!err) {
return callback();
}
});
}
};
spawnProcess('mklink', ['/D', 'C:\\some\\path\\to\\my\\intended\\link', 'C:\\path\\to\\my\\folder'], {}, done);
答案 1 :(得分:0)
作为解决方法,请尝试以下操作:
require('child_process').spawn('cmd',
['/C', 'mklink', '/D', 'C:\\some\\path\\to\\my\\intended\\link',
'C:\\path\\to\\my\\folder'],
{stdio:'inherit'})