events.js:72
throw er; // Unhandled 'error' event
^
Error: spawn ENOENT
at errnoException (child_process.js:1000:11)
at Process.ChildProcess._handle.onexit (child_process.js:791:34)
Run Code Online (Sandbox Code Playgroud)
作者说明:此错误的许多问题鼓励我发布此问题以供将来参考.
相关问题:
我想使用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
返回命令的输出,我可以在执行后将其打印到控制台,但这样我没有"实时"输出...
我有一个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的新手并且在命令行中工作.
是否可以从shell脚本中的父进程id获取子进程ID?
我有一个使用shell脚本执行的文件,这会导致一个新的进程process1(父进程).这个过程1已经分叉的另一个进程过程2(子进程).使用脚本,我可以使用以下命令获取process1的pid :
cat /path/of/file/to/be/executed
Run Code Online (Sandbox Code Playgroud)
但是我无法获取子进程的pid.
使用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)
子进程仍在运行..杀死父进程后
我正在尝试从Node.js启动一个shell命令,而不重定向该命令的输入和输出 - 就像使用shell脚本弹出命令或使用Ruby的system
命令一样.如果子进程想要写入STDOUT,我希望它直接进入控制台(或重定向,如果我的Node应用程序的输出被重定向).
Node似乎没有任何直接的方法来做到这一点.看起来运行另一个进程的唯一方法是使用child_process
,它总是将子进程的输入和输出重定向到管道.我可以编写代码来接受来自这些管道的数据并将其写入我的进程的STDOUT和STDERR,但是如果我这样做,API会迫使我牺牲一些灵活性.
我想要两个功能:
看起来Node想强迫我在这两个功能之间做出选择.
child_process.spawn
,然后做child.stdout.on('data', function(data) { process.stdout.write(data); });
同样的事情stderr
,并且它会愉快地管道数据,直到奶牛回家.不幸的是,spawn
不支持shell语法.child_process.exec
.但是exec
坚持要为我缓冲子进程的STDOUT和STDERR并最终将它们交给我,并且它限制了这些缓冲区的大小(可配置,默认为200K).我仍然可以挂钩on('data')
事件,如果我想看到生成的输出,但exec
仍然会将数据添加到其缓冲区.当数据量超过预定义的缓冲区大小时,exec
将终止子进程.(从灵活性的角度来看child_process.execFile
,这也是两个世界中最糟糕的:没有shell语法,但你仍然需要限制你期望的输出量.)
我错过了什么吗?有没有办法在Node中弹出子进程,而不是重定向其输入和输出?支持shell语法并且在预定义的输出量之后不会丢失的东西,就像在shell脚本,Ruby等中可用的那样?
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选项实际存在)
我正在尝试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发送更多信息.
提前致谢.
我有两个单独的节点应用程序.我希望其中一个能够在代码中的某个时刻启动另一个.我该怎么做呢?
python中的什么命令可以用来运行另一个python程序?它不应该等待子进程终止,而是继续.它也不需要记住它的子进程.