我正在尝试使用child_process.spawn通过node.js中的cmd.exe执行Windows命令.它正确执行,但仅以默认文本颜色显示.我如何保留颜色.可能吗?
var spawn = require('child_process').spawn,
cmd = spawn('cmd', ['/s', '/c', 'C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild c:\\test.sln']);
cmd.stdout.on('data', function(data){
process.stdout.write(data);
});
cmd.stderr.on('data', function(data){
process.stderr.write(data);
});
cmd.on('exit', function(code){
console.log(code);
});
Run Code Online (Sandbox Code Playgroud)
通过节点执行时,不保留颜色.

通过cmd.exe直接执行时,颜色存在.(这是预期的行为).在通过节点执行时如何获得此行为.

Mit*_*tin 126
child_process.spawn()有新的'stdio'选项.试试以下:
spawn("path to executable", ["params"], {stdio: "inherit"});
Run Code Online (Sandbox Code Playgroud)
"继承"表示[0,1,2]或[process.stdin,process.stdout,process.stderr].
fre*_*ous 15
对我有用的跨平台解决方案是同时使用shell: true和stdio: 'inherit':
const spawn = require('child_process').spawn;
spawn('node', ['./child.js'], { shell: true, stdio: 'inherit' });
Run Code Online (Sandbox Code Playgroud)
谢谢@ 59naga https://github.com/nodejs/node/issues/2333
Too*_*ate 10
试试这个:
var spawn = require('child_process').spawn
, command = 'C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild c:\\test.sln'
, cmd = spawn('cmd', ['/s', '/c', command], { customFds: [0,1,2] });
cmd.on('exit', function(code){
console.log(code);
});
Run Code Online (Sandbox Code Playgroud)
请注意,无论是否customFds适用于Windows ,我都不肯定.我知道它旧的弃用功能不起作用,但当只[0,1,2]作为fd 传递时,我认为有一个特殊情况.
我一直在做类似的事情,但我只在Unix机器上运行该命令.所以让我知道这是否适用于Windows.
小智 10
如果您收到错误:
无法调用null的方法'on'
试试这个:
spawn("command", ["args"], { env : { FORCE_COLOR: true }});
Run Code Online (Sandbox Code Playgroud)
适用于摩卡
这并不能解决根本问题(缺乏适当的 TTY 流),但它应该有助于解决它。
如果您正在运行的子进程使用了 support-color ( https://www.npmjs.com/package/supports-color ) 像 chalk,那么您可以将环境变量设置FORCE_COLOR为任何值,它会跳过其余的支票。与inherit修复不同,这将允许您继续使用管道(并捕获/修改返回的数据)。
还有一个 node-pty ( https://www.npmjs.com/package/node-pty ) 模块,它提供了.spawn传递 pty(伪 tty)的能力,这可能是一个更全面的答案。我还没有玩过它,我不确定它是否跨平台。
| 归档时间: |
|
| 查看次数: |
14055 次 |
| 最近记录: |