标签: child-process


使用child_process.execSync但在控制台中保持输出

我想使用execSync在NodeJS 0.12中添加的方法,但仍然在控制台窗口中输出我运行Node脚本的输出.

例如,如果我运行具有以下行的NodeJS脚本,我希望在控制台内看到rsync命令的完整输出"live":

require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"');
Run Code Online (Sandbox Code Playgroud)

我明白execSync返回命令的输出,我可以在执行后将其打印到控制台,但这样我没有"实时"输出...

child-process node.js

132
推荐指数
4
解决办法
8万
查看次数

当输出重定向到文件时,printf()和system()的结果顺序错误

我有一个C程序编译成一个名为myprogram的可执行文件.这是它的主要功能:

int main(int argc, char ** argv) {
  printf("this is a test message.\n");
  system("ls");

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我myprogram > output.txt在Linux shell中运行然后检查output.txt时,我看到ls上面列出的输出"这是一条测试消息".

我觉得应该是相反的方式.为什么会发生这种情况,我能做些什么,以便"这是一条测试消息"出现在output.txt的顶部?

如果重要的话,我是C的新手并且在命令行中工作.

c linux printf child-process io-redirection

98
推荐指数
3
解决办法
4834
查看次数

如何从父进程获取子进程

是否可以从shell脚本中的父进程id获取子进程ID?

我有一个使用shell脚本执行的文件,这会导致一个新的进程process1(父进程).这个过程1已经分叉的另一个进程过程2(子进程).使用脚本,我可以使用以下命令获取process1的pid :

cat /path/of/file/to/be/executed
Run Code Online (Sandbox Code Playgroud)

但是我无法获取子进程的pid.

linux shell process child-process

64
推荐指数
7
解决办法
15万
查看次数

如何杀死nodejs中的childprocess?

使用shelljs创建了一个子进程

!/usr/bin/env node

require('/usr/local/lib/node_modules/shelljs/global');
   fs = require("fs");  
   var child=exec("sudo mongod &",{async:true,silent:true});

   function on_exit(){
        console.log('Process Exit');
        child.kill("SIGINT");
        process.exit(0)
    }

    process.on('SIGINT',on_exit);
    process.on('exit',on_exit);
Run Code Online (Sandbox Code Playgroud)

子进程仍在运行..杀死父进程后

shell child-process node.js

57
推荐指数
1
解决办法
6万
查看次数

从Node.js运行shell命令而不缓冲输出

我正在尝试从Node.js启动一个shell命令,而不重定向该命令的输入和输出 - 就像使用shell脚本弹出命令或使用Ruby的system命令一样.如果子进程想要写入STDOUT,我希望它直接进入控制台(或重定向,如果我的Node应用程序的输出被重定向).

Node似乎没有任何直接的方法来做到这一点.看起来运行另一个进程的唯一方法是使用child_process,它总是将子进程的输入和输出重定向到管道.我可以编写代码来接受来自这些管道的数据并将其写入我的进程的STDOUT和STDERR,但是如果我这样做,API会迫使我牺牲一些灵活性.

我想要两个功能:

  • Shell语法.我希望能够在命令之间管道输出,或运行Windows批处理文件.
  • 无限输出.如果我正在向编译器进行shell并且它想要生成兆字节的编译器警告,我希望它们都能在屏幕上滚动(直到用户厌倦了它并按Ctrl + C).

看起来Node想强迫我在这两个功能之间做出选择.

  • 如果我想要无限量的输出,我可以使用child_process.spawn,然后做child.stdout.on('data', function(data) { process.stdout.write(data); });同样的事情stderr,并且它会愉快地管道数据,直到奶牛回家.不幸的是,spawn不支持shell语法.
  • 如果我想要shell语法,我可以使用child_process.exec.但是exec坚持要为我缓冲子进程的STDOUT和STDERR并最终将它们交给我,并且它限制了这些缓冲区的大小(可配置,默认为200K).我仍然可以挂钩on('data')事件,如果我想看到生成的输出,但exec仍然会将数据添加到其缓冲区.当数据量超过预定义的缓冲区大小时,exec将终止子进程.

(从灵活性的角度来看child_process.execFile,这也是两个世界中最糟糕的:没有shell语法,但你仍然需要限制你期望的输出量.)

我错过了什么吗?有没有办法在Node中弹出子进程,而不是重定向其输入和输出?支持shell语法并且在预定义的输出量之后不会丢失的东西,就像在shell脚本,Ruby等中可用的那样?

child-process node.js

53
推荐指数
3
解决办法
3万
查看次数

NodeJs child_process工作目录

我试图在不同的目录中执行子进程,然后在其父目录中执行.

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

exec(
    'pwd',
    {
        cdw: someDirectoryVariable
    },
    function(error, stdout, stderr) {
        // ...
    }
);
Run Code Online (Sandbox Code Playgroud)

我正在做上面的事情(虽然当然运行"pwd"不是我最终想要做的).这将最终将父进程的pwd写入stdout,无论我为cdw选项提供什么值.

我错过了什么?

(我确实确保传递路径作为cwd选项实际存在)

javascript working-directory child-process node.js

46
推荐指数
1
解决办法
4万
查看次数

Nodejs Child Process:从已经初始化的进程写入stdin

我正在尝试phantomjs使用节点生成外部进程child_process,然后在初始化后将信息发送到该进程,这可能吗?

我有以下代码:

var spawn = require('child_process').spawn,
    child = spawn('phantomjs');

child.stdin.setEncoding = 'utf-8';
child.stdout.pipe(process.stdout);

child.stdin.write("console.log('Hello from PhantomJS')");
Run Code Online (Sandbox Code Playgroud)

但我在stdout上唯一得到的是phantomjs控制台的初始提示.

phantomjs> 
Run Code Online (Sandbox Code Playgroud)

所以似乎child.stdin.write没有产生任何影响.

我不确定我是否可以在初始产卵时向phantomjs发送更多信息.

提前致谢.

stdin external-process child-process node.js phantomjs

44
推荐指数
2
解决办法
4万
查看次数

使用node.js启动另一个节点应用程序?

我有两个单独的节点应用程序.我希望其中一个能够在代码中的某个时刻启动另一个.我该怎么做呢?

javascript child-process node.js

36
推荐指数
1
解决办法
2万
查看次数

如何在不举起原创的情况下运行另一个python程序?

python中的什么命令可以用来运行另一个python程序?它不应该等待子进程终止,而是继续.它也不需要记住它的子进程.

python child-process

35
推荐指数
2
解决办法
1693
查看次数