我想运行node。js作为子流程,并向其提供输入。使用C,下面是我的一些示例代码。
我遇到的问题是,尽管子进程的stdout仍然指向终端,但在向子进程stdin输入打印的“helloworld”行后,我什么也看不到。即使我对管道进行了fflush()操作,我也看不到任何输出。但是,如果关闭管道的输入,则“Hello World”将显示在终端上。
子流程似乎只是缓冲-为什么?我希望最终将子流程stdout重定向到另一个管道,并从main()读入它。
int main(int argc,char*argv[]){
int toNode[2];
pipe(toNode);
pid_t child_pid = fork();
if (child_pid == 0) { // child
// close write end
close(toNode[1]);
// connect read end to stdin
dup2(toNode[0], STDIN_FILENO);
// run node executable
char* arg_list[] = { "/usr/bin/node", NULL};
execvp(arg_list[0], arg_list);
fprintf(stderr, "process failed to start: %s\n", strerror(errno));
abort();
}
else { // parent
FILE* stream;
// close read end
close(toNode[0]);
// convert write fd to FILE object
stream = fdopen(toNode[1], "w");
fprintf(stream, "console.log('Hello World');\n");
fflush(stream);
//close(toNode[1]);
waitpid(child_pid, NULL, 0);
}
return 0; }
读取管道没有问题。问题在于,/usr/bin/node
在默认情况下,如果检测到stdin
是交互式的,则只调用REPL(read-eval-print循环)。如果您有足够新版本的nodejs
,那么您可以提供-i
或--interactive
命令行标志,但这不仅仅是在读取每一行时执行它;它还真的将充当控制台,包括将ANSI颜色序列插入输出并打印每个表达式的值。
有关更多信息,请参阅此论坛帖子。
Process 结构体代表了一个正在运行的子进程,并公开了stdin(标准输入),stdout(标准输出) 和 stderr(标准错误) 句柄,通过管道和底层的进程交互。(原文:The Process struct represents a running child process, and exposes the stdin, stdout and stderr handles for int
问题内容: 我正在尝试使用Ruffus管道中的多个Sailq文件作为参数的Sailfish。我使用python中的子流程模块执行Sailfish,但即使设置,在子流程调用中也不起作用。 这是我要使用python执行的命令: 或(最好): 概括: 我将如何在python中执行此操作?子过程正确吗? 问题答案: 模拟bash进程替换: 在Python中,您可以使用命名管道: 在哪里: 实现bash进程
问题内容: 我想在以下行上使用子流程: 我发现感谢子帖子的子流程文档,但是在示例中,我们仅使用了两次管道。 因此,我尝试了三个命令中的两个,它可以正常工作 您能帮我执行第三条命令吗? 非常感谢你。 问题答案: 只需按照相同的示例添加第三个命令:
问题内容: 我正在用Go编写程序,该程序执行类似程序的服务器(也就是Go)。现在,我想在启动父程序的终端窗口中获得子程序的标准输出。一种方法是使用函数,但这仅在进程退出后才输出标准输出。(这是一个问题,因为这个类似于服务器的程序运行了很长时间,并且我想读取日志输出) 变量是,我不知道该如何使用它来完成任务,因此我在网络上找不到有关此主题的任何有用信息。 对代码的解释:取消注释该函数以获取要编译
问题内容: 感谢以下有用的建议: 所以当我似乎固定 将命令分成对Popen的单独调用 stderr = subprocess.PIPE作为每个Popen链的参数。 新代码: 原始帖子: 我花了很长时间尝试解决通过简单的subprocess.Popen传递问题。 码: 输出文件的长度约为1000行: 文件长度大于241行的输出: 文件长度小于241行的输出很好。 我一直在疯狂地阅读文档并进行谷歌搜索
我已经在Jenkins上创建了一个基本的声明性管道。当我运行构建时,它会抛出以下错误 Jenkins服务器使用最新版本的默认插件设置为默认。Jenkinsfile如下所示 当Jenkins读取Jenkinsfile时,看起来块失败了,这在Jenkinsfile看起来很混乱。