当前位置: 首页 > 面试题库 >

快速获取另一个程序的输出作为输入

孙宏扬
2023-03-14
问题内容

我以这种方式使用了两个程序:

$ c_program | python_program.py

c_program使用以下命令打印printf()内容,而python_program.py使用以下命令读取内容sys.stdin.readline()

我想使python_program.py在打印时立即处理c_program的输出,以便它可以打印自己的当前输出。不幸的是python_program.py仅在c_program结束后才获得其输入。

我该如何解决?


问题答案:

只需将stdout设置为在C程序的开始进行行缓冲(在执行任何输出之前),如下所示:

#include <stdio.h>
setvbuf(stdout, NULL, _IOLBF, 0);

要么

#include <stdio.h>
setlinebuf(stdout);

两种都可以在Linux上运行,但是setvbuf属于C标准,因此它将在更多系统上运行。

默认情况下,stdout将被块缓冲用于管道或文件,或行被缓冲用于终端。由于在这种情况下stdout是管道,因此默认值将为块缓冲。如果是块缓冲的,则当缓冲区已满或调用时,将刷新该缓冲区fflush(stdout)。如果它是行缓冲的,那么它将在每行之后自动刷新。



 类似资料:
  • 问题内容: 我想在我的Java程序中读取c-Application的输出流。 iremoted (可在此处获得:http : _//osxbook.com/software/iremoted/download/iremoted.c_ )是一个C应用程序,如果按下了Apple Remote遥控器上的按钮,它将显示诸如“ 0x19按下”的单独行。如果我启动改头换面的程序,那么一切都会很好,每当我按下一

  • 输入输出是人机交互的一种方式。最常见的输入输出是标准输入输出和文件输入输出(当然还有数据库输入输出,本节不讨论这部分)。 标准输入 标准输入也叫作控制台输入,是常见输入的一种。 例子1: use std::io; fn read_input() -> io::Result<()> { let mut input = String::new(); try!(io::stdin().r

  • 问题内容: 您认为获得线程工作结果的最佳方法是什么?想象一个执行一些计算的线程,您如何警告主程序计算完成? 您可以每隔X毫秒轮询某个称为“作业完成”的公共变量或其他方式,但是随后您将在结果可用时才收到结果……主代码将浪费时间等待它们。另一方面,如果使用较低的X,则轮询将浪费CPU太多次。 因此,您如何做才能知道线程或某些线程已经完成了工作? 抱歉,如果它看起来与此其他问题相似,我想这可能是 ebe

  • 问题内容: 我在终端中使用以下代码运行一些命令: 然后,我想知道运行此命令的结果是什么,例如,如果运行 我想阅读有关回购中更改的实际信息。有什么办法可以迅速做到这一点? 问题答案: 是用于将另一个程序作为子进程运行的类。您可以捕获程序的输出,错误输出,退出状态等等。 扩展我对xcode 6 swiftsystem()命令的回答,这是一个简单的实用函数,用于同步运行命令,并返回输出,错误输出和退出代

  • 问题内容: 我编写了一个简单的Java程序,该程序每5秒就会向std输出一些“ hello”。 然后我编译它并得到一个.class。 我编写了另一个Java程序来运行它并获得输出: 但是它总是打印: 哪里错了?我的操作系统是“ Windows XP”。 问题答案: 到达流的末尾时将返回。 因为您基本上是在忽略此退出指示器并无限循环地循环,所以您得到的只是。 可能的原因是因为该进程已向错误流输出了一

  • 共享收货地址接口 wx.openAddress({ success: function (res) { var userName = res.userName; // 收货人姓名 var postalCode = res.postalCode; // 邮编 var provinceName = res.provinceName; // 国标收货地址第一级地址(省)