首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用child_process.execSync,但将输出保留在控制台中

使用child_process.execSync,但将输出保留在控制台中
EN

Stack Overflow用户
提问于 2015-05-09 07:23:23
回答 3查看 139.4K关注 0票数 217

我想使用在NodeJS 0.12中添加的execSync方法,但是仍然在控制台窗口中保存我从中运行节点脚本的输出。

例如,如果我运行一个包含以下行的NodeJS脚本,我希望在控制台中看到rsync命令"live“的完整输出:

代码语言:javascript
复制
require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"');

我知道execSync返回命令的输出,并且我可以在执行后将其打印到控制台,但这样我就没有“实时”输出……

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-29 05:23:13

如果这是你想要的,你可以传递parent´s stdio to the child process

代码语言:javascript
复制
require('child_process').execSync(
    'rsync -avAXz --info=progress2 "/src" "/dest"',
    {stdio: 'inherit'}
);
票数 425
EN

Stack Overflow用户

发布于 2015-05-11 21:21:27

除非您像公认的答案所建议的那样重定向标准输出和标准错误,否则这对于execSync或spawnSync是不可能的。在不重定向stdout和stderr的情况下,这些命令仅在命令完成时返回stdout和stderr。

要在不重定向stdout和stderr的情况下完成此操作,您需要使用spawn来完成此操作,但它非常简单:

代码语言:javascript
复制
var spawn = require('child_process').spawn;

//kick off process of listing files
var child = spawn('ls', ['-l', '/']);

//spit stdout to screen
child.stdout.on('data', function (data) {   process.stdout.write(data.toString());  });

//spit stderr to screen
child.stderr.on('data', function (data) {   process.stdout.write(data.toString());  });

child.on('close', function (code) { 
    console.log("Finished with code " + code);
});

我使用了一个ls命令,它以递归方式列出文件,以便您可以快速测试它。Spawn将您试图运行的可执行文件名作为第一个参数,作为第二个参数,它使用一个字符串数组来表示您想要传递给该可执行文件的每个参数。

但是,如果您设置为使用execSync,并且由于某些原因无法重定向标准输出或标准错误,则可以打开另一个终端,如xterm,并向其传递如下命令:

代码语言:javascript
复制
var execSync = require('child_process').execSync;

execSync("xterm -title RecursiveFileListing -e ls -latkR /");

这将允许您看到您的命令在新终端中做了什么,但仍然具有同步调用。

票数 20
EN

Stack Overflow用户

发布于 2020-11-22 22:56:12

简单地说:

代码语言:javascript
复制
 try {
    const cmd = 'git rev-parse --is-inside-work-tree';
    execSync(cmd).toString();
 } catch (error) {
    console.log(`Status Code: ${error.status} with '${error.message}'`;
 }

参考:https://stackoverflow.com/a/43077917/104085

代码语言:javascript
复制
// nodejs
var execSync = require('child_process').execSync;

// typescript
const { execSync } = require("child_process");

 try {
    const cmd = 'git rev-parse --is-inside-work-tree';
    execSync(cmd).toString();
 } catch (error) {
    error.status;  // 0 : successful exit, but here in exception it has to be greater than 0
    error.message; // Holds the message you typically want.
    error.stderr;  // Holds the stderr output. Use `.toString()`.
    error.stdout;  // Holds the stdout output. Use `.toString()`.
 }

当命令运行成功时:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30134236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档